cocos2d-x 写游戏(3)

    上面提到,我们写游戏是从定制我们的Scene开始的。如何定制我们的Scene呢?有两种做法,第一种是继承Scene,改写他的init函数来添加演员。第二种是,直接在外部动态的添加演员。这里我们使用第二种方法。cocos2d-x在架构上支持多个Scene的切换,我们这里只把Scene作为一个舞台或者容器,他本身不提供任何额外的功能。而且我们只使用一个Scene来开发游戏。对于简单的游戏开发来说,使用多个Scene能起到简化代码作用,但是如果是复杂点的游戏,使用一个Scene能提高我们的控制能力。

    如果Scene不提供内容,那么谁来提供内容呢?那就是Layer。Scene里面可以添加多个Layer来呈现内容。而Layer本身其实也只是一个容器和管理工具,他管理多个Sprite。真正提供内容的正是Sprite。在我刚开始写游戏的时候,我很纳闷,做游戏怎么和雪碧扯上关系了。这里的Sprite是一个通用的游戏术语,翻译为精灵,你可以理解为一张图片。

    cocos2d-x本身提供的Layer也是没有内容的,需要我们来定制。这里我们采用第一种做法,继承一个Layer来定制他。比如说我们需要现实一个游戏的背景图片,可以使用下面的代码:

class HelloBgLayer : public cocos2d::Layer
{
public:
    HelloBgLayer() = default;
    virtual ~HelloBgLayer() = default;
    virtual bool init();
    CREATE_FUNC(HelloBgLayer);
};

USING_NS_CC;

bool HelloBgLayer::init()
{
    if (!Layer::init()) {
        return false;
    }
    auto bg = Sprite::create("bg.png");
    bg->setPosition(_contentSize.width/2, _contentSize.height/2);
    addChild(bg);
    return true;
}

    现在我们有了自己定制的Layer,我们就需要把他添加到场景中去,并且是在导演开始场景之前就准备好:

bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    auto director = Director::getInstance();
    auto scene = Scene::create();
    
    auto layer = HelloBgLayer::create();
    scene->addChild(layer);
    
    director->runWithScene(scene);
    return true;
}
    现在我们游戏的背景就已经搭建好了。

    一张好的bg就能带来游戏感十足的体验。要做到这步需要注意几点:

    如何使用C++里面的类和继承需要参考一点C++语法,这里我们覆写init函数,来达到定制的目的。在init函数里面,我们要先调用父类的init函数,这是最严谨的做法,不调用都是错误的。之后我们要创建一个背景精灵,添加到我们的Layer。为了能正确显示,需要我们吧bg.png这个文件添加到工程中去。后面的代码是设置背景的位置,使用的是Layer的尺寸的一半,也就是中心点的位置。为了使用上的方便,我们利用CREATE_FUNC(HelloBgLayer);来添加一个create函数。之后我们就能利用HelloBgLayer::create()来创建我们的BgLayer了。

    我们的Layer已经布置好,为了让观众看到,还需要添加到Scene里面去。这里比上面多了2行代码。第一行创建一个BgLayer,第二行把这个BgLayer添加到Scene里面。这样导演运行场景的时候,我们的Layer就显示出来了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值