标签:
新建的cocos2Dx工程默认的是一个helloworld工程,里面包含了2个类文件,一个是AppDelegate,一个是HelloworldScene类文件(这个类叫HellowWorld,为什么类文件和类名不一样这一点让我觉得挺不爽的。)在AppDelegate内主要进行“导演“的初始化,设置显示信息和窗口大小等等。还有一个主要功能就是初始化和显示第一个场景。
auto scene = HelloWorld::createScene();//调用hello world类的方法创建场景 director->runWithScene(scene);//运行场景,该方法只在第一次加载场景时调用
下面来看HelloWorld类,了解场景的初始化过程对于了解程序的运行过程会有帮助。
1 class HelloWorld : public cocos2d::Layer 2 { 3 public: 4 static cocos2d::Scene* createScene(); 5 6 virtual bool init(); 7 8 // a selector callback 9 void menuCloseCallback(cocos2d::Ref* pSender); 10 11 // implement the "static create()" method manually 12 CREATE_FUNC(HelloWorld); 13 };
1 Scene* HelloWorld::createScene() // cpp文件中的createScene方法实现 2 { 3 // ‘scene‘ is an autorelease object 4 auto scene = Scene::create(); 5 6 // ‘layer‘ is an autorelease object 7 auto layer = HelloWorld::create(); 8 9 // add layer as a child to scene 10 scene->addChild(layer); 11 12 // return the scene 13 return scene; 14 }
在AppDelegate中使用createScene方法,在该方法中使用Scene::create创建一个新场景,然后再用HelloWorld类中的create方法创建helloWorld层(注意,HelloWrold继承的是Layer,所以实际上它是一个层)。CREATE_FUNC是一个预定义的宏,用来创建对象,函数定义如下:
1 #define CREATE_FUNC(__TYPE__) 2 static __TYPE__* create() 3 { 4 __TYPE__ *pRet = new(std::nothrow) __TYPE__(); 5 if (pRet && pRet->init()) 6 { 7 pRet->autorelease(); 8 return pRet; 9 } 10 else 11 { 12 delete pRet; 13 pRet = NULL; 14 return NULL; 15 } 16 }
可以看到在该函数中创建了一个调用它的类对象,并且使用该类的init方法初始化,并返回一个指针。创建完成后使用addchild加入刚刚创建的场景中,第一个场景就完成啦。
标签:
原文地址:http://www.cnblogs.com/yang-xiong/p/4951778.html