Cocos2d-x入门教程(二)简单的静态显示对象

为了进一步深入学习贯彻Cocos2d,我们将自己写一个场景类,但我们不会走的太远,凡是都要循序渐进,哪怕只前进一点点,那也至少是前进了,总比贪多嚼不烂一头雾水的好。

在上一节中我们建立了一个HelloWorld项目,如果你用的的确是HelloWorld这个名字,那么你的项目中会有一个HelloWorldScene这个类,也是在这个类里实现了所有屏幕上的显示。现在我们就仿照这个类来实现自己的一个场景,这个类命名为StaticDisplayObject。

首先需要声明这个类,在StaticDisplayObject.h文件中我们仿照HelloWorldScene.h将这个类声明出来:

#include "cocos2d.h"



class StaticDisplayObject : public cocos2d::CCLayer

{

public:

    virtual bool init();



    static cocos2d::CCScene * scene();



    void mouseCloseCallBack(CCObject * pSpender);



    CREATE_FUNC(StaticDisplayObject);

};

虽然除了类名这个类同HelloWorldScene之间没有任何差别,但如果你是新手,那么最好一个字一个字的亲手打出来。值得注意的是这里面的CREATE_FUNC宏,它实际上实现了相应类(在这里是StaticDisplayObject)的create方法。Cocos2d-x为我们定义了很多宏,既然定义成了宏那么说明它必然是常用的,因此需要将牢记。

声明之后,需要将其实现:

因为宏CREATE_FUNC已经将create方法实现了,所以我们可以不用管它。而mouseCloseCallBack方法涉及到鼠标交互,在这里我们不考虑,可以放着不用实现。

接下来首先是scene方法:

#include "StaticDisplayObject.h"



using namespace cocos2d;



CCScene * StaticDisplayObject::scene()

{

    CCScene * scene = NULL;

    //这种在循环中初始化的奇怪方式,可以避免写多个if判断和写多个return语句

    do

    {

        scene = CCScene::create();

        CC_BREAK_IF(!scene);



        StaticDisplayObject * layer = StaticDisplayObject::create();

        CC_BREAK_IF(!layer);



        scene->addChild(layer);

    }while(0);



    /*如果不喜欢这种循环方式可以用以下等效方法

    scene = CCScene::create();

    if(!scene) return scene;



    StaticDisplayObject * layer = StaticDisplayObject::create();

    if(!layer) return scene;



    scene->addChild(layer);

    */



    return scene;

};

注意这里的这个循环,它看似是个循环,实际上没有真正循环的意义,他只是想利用break语句而已。

最后是init方法,如同它的名称所表达的含义,在这里我们需要对场景进行初始化,我们在这里创建两个显示对象:

bool StaticDisplayObject::init()

{

    bool bRet = false;

    do

    {

        //super call

        CC_BREAK_IF(!CCLayer::init());



        CCSize size =  CCDirector::sharedDirector()->getWinSize();



        CCSprite * sprite = CCSprite::create("Alcedo256.jpg");

        CC_BREAK_IF(!sprite);

        sprite->setPosition(ccp(size.width/2,size.height/2));

        this->addChild(sprite);



        CCLabelTTF * label = CCLabelTTF::create("Hello Cocos2d-x!","Arial",13);

        CC_BREAK_IF(!label);

        label->setPosition(ccp(size.width/2+60,size.height/2-80));

        this->addChild(label);



        bRet = true;



    }while(0);



    return bRet;

};

需要注意的几点是:

1.调用父级的init方法。

2.获取窗口大小,窗口大小是通过一个CCSize对象来表示的CCSize有width和height两个属性。

剩下的我们简单地创建了两个显示对象,并设置了他们的位置,,最后为了让这个场景能够显示在屏幕上,我们需要在AppDelegate类的applicationDidFinishLaunching方法中,将这个场景进行实例化并传递给CCDirector对象的runWithScene方法:

CCScene *pScene = StaticDisplayObject::scene();

pDirector->runWithScene(pScene);

运行程序我们得到如下的显示:

Cocos2d-x入门教程(二)简单的静态显示对象

可以尝试调一下显示对象的坐标,你会发现Cocos2d将屏幕的左下角设置为原点,而且显示对象的中心点为注册点。

相关资料均已上传至Github:https://github.com/Physwf/physwf-c-lab/tree/master/Cocos2d-x%20Tutorial

你可能感兴趣的:(cocos2d-x)