模仿HelloWorldScene,写第一个Scene

来源:互联网 发布:js div onclick事件 编辑:程序博客网 时间:2024/06/05 02:08

看了半天的源码,有种看看都懂,一问都不知道的感觉。唉,还是实际点,来敲敲代码吧。

打开我的vs,新建类GameScene。为了公用,把类放在Class文件夹下吧。

一个场景继承cocos2d::Layer这个类,因为每个场景都是由层组成的,所以实现场景所以需要继承Layer。

HelloWorldScene里有四个方法,这应该是实现一个场景最基础的几个方法咯,所以我也在GameScene里仿着写这几个。

static cocos2d::Scene* createScene();//静态函数,通过该函数获取场景对象virtual bool init();//初始化Scene函数void menuCloseCallback(cocos2d::Ref* pSender);//关闭按钮回调函数CREATE_FUNC(GameScene);//具体创建GameScene场景的宏函数/*这是一个宏,具体内容如下:#define CREATE_FUNC(__TYPE__) \static __TYPE__* create() \{ \__TYPE__ *pRet = new __TYPE__(); \if (pRet && pRet->init()) \{ \pRet->autorelease(); \return pRet; \} \else \{ \delete pRet; \pRet = NULL; \return NULL; \} \}<span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre"></span>CREATE_FUNC(GameScene);将转化成</span>
<span style="white-space:pre"></span><pre name="code" class="cpp"><span style="white-space:pre"></span>static GameScene* create {<span style="font-family: Arial, Helvetica, sans-serif;"> </span>GameScene *pRet = new GameScene(); if (pRet && pRet->init()){ pRet->autorelease(); return pRet;} else { delete pRet; pRet = NULL; return NULL; }
*/

在头文件定义好后,然后在GameScene.cpp里具体实现。

USING_NS_CC;//创建GameScene场景Scene* GameScene::createScene() {auto scene = Scene::create();auto layer = GameScene::create();scene->addChild(layer);return scene;}bool GameScene::init() {//先实例化父类Layer的init方法,成功返回true,失败返回falseif (!Layer::init()) {return false;}Size size = Director::getInstance()->getVisibleSize();Vec2 origin = Director::getInstance()->getVisibleOrigin();auto closeSprite = MenuItemImage::create("CloseNormal.png",//正常状态下的图片"CloseSelected.png",//被选中的状态下的图片CC_CALLBACK_1(GameScene::menuCloseCallback, this)); //回调函数地址closeSprite->setPosition(Vec2(origin.x + size.width - closeSprite->getContentSize().width / 2,//设置关闭菜单的大小origin.y + size.height - closeSprite->getContentSize().height / 2));auto menu = Menu::create(closeSprite, NULL);//把它加入到菜单里menu->setPosition(Vec2::ZERO);<span style="white-space:pre"></span>//设置菜单的位置this->addChild(menu, 1);}void GameScene::menuCloseCallback(Ref* pSender) {Director::getInstance()->end();}

在AppDelegate.cpp里引入我这个场景的头文件,然后把初始运行的HelloWorld::createScene()改成我的GameScene::createScene();Ok,编译运行。


黑漆漆的一片,代表这第一步的成功额。。。



--小新

2014-8-19

0 0
原创粉丝点击