Cocos2d-x 场景、导演、层、精灵、菜单和节点

场景


场景是个虚拟的概念,在Cocos2d-x中场景使用Scene表示,我们可以向场景中添加各种层、精灵、菜单等。场景是游戏的基础,所有的对象都要放在场景中。

创建一个场景类对象:

auto scene = HelloWord::createScene();

场景类源码:

class CC_DLL Scene : public Node{
public:
    static Scene *create();
    Scene();
    virtual ~Scene();
    virtual bool init() override;
    ... 
}

导演


导演类(Director)负责把控全场,所有场景切换工作都必须经过导演来执行。

加载第一个场景

在刚进入游戏时候需要加载一个初始场景,代码如下:

Director::getInstance()->runWithScene(scene);

其中,runWithScene只在加载第一个场景时使用。

简单场景切换

场景切换代码为:

Director::getInstance()->replaceScene(scene);

★一个栗子★

新建的Cocos2d-x中已有一个默认场景HelloWorldScene,下面再创建一个新的场景,命名为SecondScene,代码如下:

#ifndef _SENCONDSCENE_H_
#define _SECONDSCENE_H_
#include "cocos2d.h"
using namespace cocos2d;
class SecondScene : public Layer{
public:
    static Scene* createScene();
    virtual bool init();
    CREATE_FUNC(SecondScene);
};
#endif
  • 如何创建场景类?

    auto scene = HelloWord::createScene();

init函数的实现,代码如下:

#include "SecondScene.h"
Scene* SecondScene::createScene(){
    // create a scene
    auto scene = Scene::create();
    // create a layer
    auto layer = SecondScene::create();
    // add layer to scene
    scene->addChild(layer);
    reurn scene;
}

bool SecondScene::init(){
    Lable* lable = Lable::create("Hello!","Arial", 40);// create a Lable tag object
    // set lable position
    lable->setPosition(cpp(300, 200));
    // add Lable object to scene
    this->addChild(lable);
    return true;
}
  • HelloWorldScene场景切换到SecondScene场景

修改HelloWorldScene场景的menuCloseCallback函数即可,menuCloseCallback是关闭按钮的回调函数,代码如下:

void HelloWorld::menuCloseCallback(Ref *pSender){
// 切换场景
Director::getInstance->replaceScene(SecondScene::createScene());

}

注意:HelloWorldScene类上面加入#include “SecondScene.h”

场景切换含特效

参考《Cocos2d-x 3.x 游戏开发之旅》 P31—35


一个场景里包含很多层,类比Photoshop中层来理解。
创建层的代码:

Layer* layer = Layer::create();

精灵


最常见精灵,比如愤怒的小鸟中各种小鸟是精灵,超级玛丽中人物玛丽是精灵。创建精灵对象,代码如下:

// create a sprite object using a picture
Sprite* sprite = Sprite::create("CloseNormal.png");

// set sprite position
sprite->setPosition(Point(200,200));

Layer* layer = Layer::create();

// add sprite to layer
layer->addChild(sprite);

注意:创建精灵对象最简单的一种方式是直接用一张图片素材,还有Cocos2-x中创建对象的方式大部分是create或者是以create开头的函数。精灵的功能十分强大,放大、缩小、拉伸、压缩、旋转以及改变颜色等等。

菜单


游戏中的菜单按钮。

参考《Cocos2d-x 3.x 游戏开发之旅》 P37—P39

节点


Cocos2d-x中最重要的3个类:

  • Ref:Cocos2d-x引擎的基类,大部分类都继承它;
  • Node:拥有简单功能的类
  • Layer:继承Node,拥有多种功能的类,特别是屏幕触摸监听。

版权声明:本文为iFuMI原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。