模仿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
- 模仿HelloWorldScene,写第一个Scene
- 第一个静态页面的制作模仿
- cocos2d-x总结:第一个场景(scene) [2.0.1]
- cocos2d-x总结(二)第一个场景(scene)
- 写个数据库函数,模仿Split方法
- 第一个写文章
- 今天写第一个blog
- 写的第一个blog
- 写的第一个博客
- 写的第一个Shader
- 开始写第一个程序。。
- 第一个 手动写Servlet
- 写第一个文章标题
- 动手写第一个驱动
- 写的第一个作业
- 动手写第一个shell
- 模仿LordPE写了个PE解析工具
- 模仿jva的逻辑写个kotlin实体类。
- 移植3- uboot之nandflash驱动移植
- 色彩空间转换
- apache commons beanutils中类propertyUtils中的方法描述
- Box2D C++ 前言及VS环境
- strcpy函数的实现
- 模仿HelloWorldScene,写第一个Scene
- Anroid 异常:Unable to add window …… is not valid; is your activity running?
- 复习资料
- NSDate 的简单使用
- cer证书安装
- hdu 2845(最大不连续子序列)
- 解决css层的掩盖
- codeforces Round #236(DIV 2)A. Nuts
- Android SoftAp支持