| 
cocos2d-x课程大纲(基础部分) 
I. 第一章 基础1.1 前言 				1.1.1 cocos2d-x介绍 				8 B! C+ o6 y% o+ U7 ?- j2 x. a 
1.1.2 基础阶段学习目标和作品演示 				1.1.3 环境搭建 				1.1.4 介绍cocos2dx开发包目录 				1.2 第一个工程 				1.2.1 创建工程 
cocos new ProjectName -l cpp' \\\\6 ^* J4 M! N( V7 r9 k0 P在当前目录下创建一个工程名字为ProjectName
cocos new ProjectName -l cpp -d d:\\\\cocos在d:\\\\cocos目录下创建一个名字为ProjectName的工程
cocos new ProjectName -l cpp -d d:\\\\cocos -p com.Orgnization.ProjectName在d:\\\\cocos目录下创建一个工程名为ProjectName,包名为com.Orgnization.ProjectName的工程
cocos new9 J! m- W8 E( y- _查看cocos new命令的帮助
使用vs2013打开工程目录中的解决方案文件,对第一个工程进行编译和运行! M/ N, o, Y4 O8 j# |1 D 				1.2.2 介绍工程目录 
Classes 跨平台游戏逻辑代码
cocos2d cocos引擎代码
proj.xxxx 平台相关的代码和工程文件
Resources 资源文件(图片、声音、脚本) 				1.2.3 介绍详细代码 
程序入口和AppDelegate% g& ?. X0 o/ xtmain函数通过虚函数调用到AppDelegate::applicationDidFinishLaunching
AppDelegate::applicationDidFinishLaunching()) Z4 NH( H8 R8 u3 ~3 O这个是真正的入口函数,负责游戏的初始化,包括创建第一个场景
HelloWorld::init()场景层的初始化,负责显示场景的信息
HelloWorld::menuCloseCallback(Ref*)9 ?5 w2 A3 R8 a退出菜单的回调函数,负责程序退出
头文件和命名空间cocos引擎定义cocos2d.h头文件中,并且使用了命名空间cocos2d,因此我们写的程序都应该包含cocos2d头文件,并且需要使用cocos2d命名空间,
 				#include "cocos2d.h"USING_NS_CC;// #define USING_NS_CC using namespace cocos2d 
e USING_NS_CC using namespace cocos2d 				1.2.4 cocos设计理念 				_5 A. g: M5 N* x4 M$ |* j) s1.3 精灵
 				1.3.1 精灵的创建 				1.3.2 精灵的属性 
位置 Sprite::setPosition()
锚点 Sprite::setAnchorPoint()
旋转 Sprite::setRotation()
缩放 Sprite::setScale()
颜色 Sprite::setColor()
可见 Sprite::setVisible()
透明度 Sprite::setOpacity()
X翻转Sprite::setFlippedX()
Y翻转 Sprite::setFlippedY()
X扭曲 Sprite::setRotationSkewX()
Y扭曲 Sprite::setRotationSkewY()
名字 Sprite::setName()
标签 Sprite::setTag()
精灵帧 Sprite::setSpriteFrame()
纹理 Sprite::setTexture()
纹理矩形 Sprite::setTextureRect()
用户数据 Sprite::setUserData()
用户对象 Sprite::setUserObject()
获取包含精灵的矩形 Sprite::getBoundingBox()
ZOrder setLocalZOrder, setGlobalZOrder 				1.3.3 自定义精灵类(派生) 
初始化空精灵 Sprite::init()
通过文件初始化精灵 Sprite::initWithFile()
通过纹理初始化精灵 Sprite::initWithTexture()
通过精灵帧初始化精灵 Sprite::initWithSpriteFrame()% v7 s* A6 r! m' a" K, u 				1.3.4 纹理和精灵帧 
纹理) x1 u, r9 K% I对应的类叫做Texture2D,在2D的概念中,纹理其实就是指图片了。图片在加载到内存之后,做进一步的处理,将数据格式转换成适合opengl渲染的格式,这个格式的数据我们称之为纹理。+ Q. [+ C% m0 d: {, E
精灵帧对应的类叫做SpriteFrame,有时候一张大的纹理包括很多小图,我们只需要纹理的一部分来创建精灵,我们可以理解精灵帧是纹理的一部分。6 y) Fg) L1 @6 K" }
 
SpriteFrame* frame = SpriteFrame::create(filename, rect);
SPriteFrame* frame = SpriteFrame::createWithTexture(texture, rect);
SpriteFrameCache::getInstance()->addSpriteFramesWithFile(plistFile)1 H4 g, ^/ [3 y) c3 ~; v! q/ a& R3 ^6 K通过plist文件加载一些列精灵帧,这个将来在缓存时细说! `. a7 eb; V. w" a$ ~% X# {8 t
 				1.4 坐标体系和锚点 				1.4.1 坐标体系概念 
游戏中使用的是cocos2dx坐标体系,也叫GL坐标体系
 				1.4.2 精灵的锚点 
setAnchorPoint
调用精灵的setPosition时的对齐点
锚点范围为(0, 0) ~ (1, 1)
使用相对坐标,非绝对坐标
是setRotation的中心点 				1.5 单点触摸处理 				1.5.1 设置触摸监听 				1.5.2 Touch对象 
每个触摸函数都有两个参数,Touch和Event,其中Event可以忽略,Touch对象中带着一些触摸信息需要我们了解 
Touch::getLocation返回触摸当前坐标,该坐标是世界体系的坐标,不论监听的对象是精灵还是层,返回坐标都是世界坐标,该函数可以在began、moved、ended、cancelled函数中调用获取当前触摸的位置
Touch::getDelta返回触摸偏移量,该函数一般在moved中调用才有意义
Touch::getStartLocation返回触摸开始时位置,该函数在began时和getLocation一样,在moved和ended时,可以调用该函数返回当初触摸开始时位置
 				1.5.3 lambada表达式和应用 
Lambada表达式 
与普通函数代码块相同
一般省略,lambada表达式的返回值代表了返回类型
与普通参数列表相同! J: I7 X3 x/ b& v
[] 不捕获
[=] 捕获外部所有常量,以传值方式
[&] 捕获外部所有变量,以引用方式
[&a, b] 以引用方式捕获a,以传值方式捕获b
[&a, =] 以引用方式捕获a,其他变量传值捕获
捕获列表一般使用[&],即可
捕获列表可以捕获的参数范围为lambada表达式可见的变量,包括之前定义的局部变量,this指针,全局变量,但是捕获局部变量是一个危险的行为,因为lambada表达式被调用时,局部变量可能已经不存在了.4 i, Q. Lg' H! ~
[capture list](parameter list)->return type{function body}
[capture list]和{function body}是必须的,其他是可选的
基本语法:7 k2 H$ a) _P% A2 H
捕获列表 capture list' Y: F) A3 j1 d9 Y1 K. l
参数列表 parameter list! b- R]9 D; ]; E" I
返回类型 return type( G! Ye3 Q6 F( q* q7 a8 ^" c
代码块 function body' Z, N9 Q! p: e) f1 S; p: c 				EventListenerTouchOneByOne* ev = EventListenerTouchOneByOne::create();ev->onTouchBegan = [](Touch* touch, Event* ev){return true; };ev->onTouchMoved = [&](Touch* touch, Event* ev){  streak->setPosition(touch->getLocation());  sprite->setPosition(touch->getLocation());};_eventDispatcher->addEventListenerWithSceneGraphPriority(ev, this);1.5.4 练习:使用触摸移动精灵 				1.6 定时器 				1.6.1 帧定时器 				1.6.2 自定义定时器 				1.6.3 定时器回调函数的参数 				1.6.4 取消和干预定时器 				1.6.5 练习:通过定时器实现动画 				1.6.6 练习:通过定时器实现精灵运动 				1.7 内存管理 				1.7.1 Ref类 
Ref类几乎是所有cocos类的父类,在2.2.3版本里,这个类叫做CCObject,该类有一个主要的功能,就是实现了对象的引用计数器 				1.7.2 管理引用计数器 				1.7.3 静态的create方法 
cocos采用静态的create函数来创建对象,在静态的create函数里,除了创建对象之外,还调用该对象的init函数来对对象进行初始化,最后调用了autorelease将该对象加入内存管理池,纳入自动管理。
cocos的这种创建对象的方法,参考了ObjectC,从C++设计角度来说,这样创建对象也是合理的,构造函数负责数值初始化,而init负责逻辑初始化。0 q( z7 k( U+ X$ V( j/ M5 W 				1.7.4 内存管理池 
大部分时候,我们只需要create对象,然后将它加入到父节点即可,Ref的release、retain、autorelease函数,其实是内部调用的。但是理解机制很重要,某些场合下,需要我们自己去release对象 				1.8 数组容器Vector 				1.8.1 Vector 
Vector是cocos里定义的容器类,它只能将Ref或者Ref的子类对象加入到该数组中。
当一个Ref对象被加入到该数组时,Ref对象的引用计数器会自动增加1
当Ref对象从数组中移除时,Ref对象的引用计数器会自动减少1
数组访问 				1.8.2 与std::vector的区别 				1.9 碰撞检测 				1.9.1 矩形碰撞检测 
矩形和矩形:Rect::intersectsRect(Rect)
矩形和圆:Rect::intersectsCircle(Vec2, float)
矩形和点:Rect::containsPoint(Vec2)8 G! N0 p; k; Z. C% V- l5 n' [% { 				1.9.2 圆形碰撞检测 				1.9.3 点与圆碰撞检测 				1.9.4 线段碰撞检测 				1.10 文本显示 				1.10.1 systemFont 				1.10.2 altas 				1.10.3 BMFont 				1.10.4 TTF(TrueTypeFont) Label 				1.10.5 Label的锚点也是Label文字的对齐方式1.11 菜单 				1.11.1 菜单实现 
Menu类和MenuItem类 
Menu类,负责响应触摸,是Layer的派生类
MenuItem类,负责展示菜单项目
为菜单项设置回调函数 MenuItem::setCallback
自动排列菜单项 Menu::alignItemsVertically
移动菜单项位置,菜单的坐标体系原点在屏幕中间h/ b2 k7 B+ J: p 				1.11.2 菜单项介绍 
MenuItemFont
MenuItemLabel
MenuItemSprite
MenuItemImage
MenuItemToggle 				1.12 场景切换 				1.12.1 场景介绍 				1.12.2 场景替换 replaceScene 				Scene* scene = Scene::create();Director::getInstance()->replaceScene(scene); 				1.12.3 场景入栈和出栈 pushScene 				Scene* scene = Scene::create();Director::getInstance()->pushScene(scene); 				Director::getInstance()->popScene(); 				1.12.4 总结 
在cocos中,导演对象有一个场景栈来保存所有的场景,栈顶的场景为当前活动的场景,非栈顶的场景为暂停的场景。
runWithScene是第一次往栈中增加场景
replaceScene是替换栈顶的场景
pushScene是往栈中增加场景
popScene是从栈中删除一个场景,如果popScene后,栈为空,也就是说pop最后一个场景后,程序将退出
在游戏中,慎用pushScene,因为会导致内存暴增,除非自己很清楚必须这样做。
场景切换效果/ O4 y$ {' J0 B# N, E0 ] 				1.13 截取屏幕 				1.13.1 使用RenderTexture抓屏 				1.13.2 使用utils::captureScreen抓屏 				1.14 声音 				1.14.1 cocos2dx跨平台音频引擎cocosdension 
cocos2dx的音频引擎为各个平台提供统一的接口
头文件 #include "SimpleAudioEngine.h"
需要使用命名空间 CocosDenshion0 k( k$ z7 f& u, J4 o% i. t 				1.14.2 背景音乐 				1.14.3 音效 				1.14.4 干预 				1.14.5 提高效率:预加载音乐1.14.6 背景音乐的生命周期1.14.7 程序进入后台的处理 				1.15 实现飞机大战案例 				1.15.1 设计目标 				1.15.2 控制层实现 				1.15.3 AI层实现 
敌机产生
敌机自动移动控制
子弹自动移动控制
炸弹道具产生2 C3 E4 |: zn) J 				1.15.4 碰撞检测 				1.15.5 记分实现 				1.15.6 实现游戏暂停 				1.15.7 进入分数场景 |