1. 基础概念 - 导演, 场景, 层, 精灵
1. 导演(Director):
a. Cocos2d-x核心, 用 getInstence() 获得 Director 实例.
2. 场景(Scene):
a. 通过 Director 一系列方法控制游戏中不同场景的自由切换.
b. 常用方法:
i. runWithScene(Scene *scene) 启动游戏, 并运行 scene 场景.主程序第一次启动场景使用.
ii. pushScene(Scene *scene) 将当前运行中的场景压入栈中, 再将传入的 scene 设置为当前运行场景.
iii. replaceScene(Scene *scene) 直接使用传入的 scene 替换当前场景, 当前场景被释放(切换场景最长用的方法).
iv. popScene(Scene *scene) 释放当前场景, 再从代码执行场景中弹出栈顶场景, 将其设置为当前场景, 如果栈为空, 直接结束应用, 和 pushScene 结对使用.
v. end() 释放和终止执行场景, 同时退出游戏.
vi. pause() 暂停当前场景所有计时器和动作.
vii. resume() 恢复当前场景所有计时器和动作.
c. 场景是层的容器, 包含所有要显示的游戏元素. 通常需要完成一个场景时, 会创建一个 Scene 的子类, 并在子类中实现我们需要的功能. 比如, 我们可以在子类的初始化中载入游戏资源, 为场景添加层, 启动音乐等.
3. 层(Layer):
a. Layer 是处理玩家事件响应的 Node 子类.
b. 向场景中添加层: addChild(Node child), addChild(Node child, int zOrder), addChild(Node *child, int zOrder, int tag);
c. 其中 child 就是节点, 对于场景而言, 通常我们添加的场景, 就是层.
d. 创建3个不通层的例子:
Auto layer = LayerColor::create(Color4B(0, 128, 128, 255));
Layer->setContentSize(CCSizeMake(120, 80));
Layer->setPosition(Point(50, 50));
addChild(layer, 10);
Auto layer1 = LayerColor::create(Color4B(128, 0, 128, 255));
Layer->setContentSize(CCSizeMake(120, 80));
Layer->setPosition(Point(100, 80));
addChild(layer1, 20);
auto layer2 = LayerColor::create(Color4B(128, 128, 0, 255));
Layer->setContentSize(CCSizeMake(120, 80));
Layer->setPosition(Piont(150, 110));
addChild(layer2, 30);
4. 精灵(Sprite):
a. 它可以移动, 旋转, 缩放, 执行动画, 并接收其他转换.
b. 类关系简单描述:
i. 使用 Texture2D 加载图片.
ii. 用 Texture2D 生成对应的 SpriteFrame (精灵帧).
iii. 将SpriteFrame 添加到 Animation 生成动画数据.
iv. 用 Animation 生成 Animate (就是最终动画).
v. 最后用 Sprite 执行这个动作.
c. 创建精灵的几种方式:
i. 直接创建:
auto sprite = Sprite::create("HelloWorld.png");
This->addChild(sprite, 0);
ii. 使用纹理来创建:
auto sprite1 = Sprite::creatWithTexture(TextureCache::getInstance()->addImage("HelloWorld.png"));
This->addChild(sprite1, 0);
iii. 使用精灵帧来创建:
auto sprite2 = Sprite::creatWithSpriteFrameName("HelloWorld.png");
This->addChild(sprite2, 0);
d. Cocos2d-x 中实现精灵显示的基本过程:
// 创建 Scene
auto scene = Scene::create();
// 创建 层
Auto layer = HelloWorld::create();
// 把层加入场景中
Scene->addChild(layer);
// 创建一个精灵
auto sprite = Sprite::create("HelloWorld.png");
// 把精灵加入到层中
layer->addChild(sprite, 0);