cocos2dx学习之路----第三篇(创建场景)
来源:互联网 发布:windows用户管理命令 编辑:程序博客网 时间:2024/04/30 01:00
这一篇我们来讲解一下在cocos2dx中场景的创建。
在上一篇中,我们对HelloWorld的整个运行机制进行了分析。相信读者对概念性的问题可能理解了一些,那现在我们就来创建出属于自己的场景吧。
以后我们例子的讲解将会一直基于我们第一篇所创建的TestFor_3_9的工程,就不用再新建一个项目了。
好,现在我们进入解决方案,在src目录上新建筛选器,命名为:MyScene。(这里我顺便整理了HelloWorld类和AppDelegate类)这样方便管理自己所创建的类。
好,下面开始创建我们自己的类吧,对刚刚的筛选器右键添加-->新建项,然后新建MyFirstScene.h及MyFirstScene.cpp,如下图所示:
好,类创建完成之后,我们需要开始对场景进行编写了,还记得HelloWorld这个类的实现思路吗?
我们先来捋一捋:
1.首先这个类是继承自Layer的,其实我们也可以不继承Layer,直接继承Scene,然后实例化出来即可,不过我们还是模仿一下Helloworld的思路,写出我们自己的HelloWorld出来;
2.实现了创建场景的静态方法;
4.重写了初始化方法;
5.在给这个类实现 create方法,即调用宏CREATE_FUNC。
以上就是HelloWorld类的设计思路。我们就模仿一下来实现自己的HelloWorld吧~
直接来看MyFirstScene.h和MyFirstScene.cpp的代码编写吧~
MyFirstScene.h:
#pragma#include "cocos2d.h"//包含头文件using namespace cocos2d;//使用cocos2d命名空间class MyFirstScene : public Layer//新建一个类,继承层(Layer){public: static Scene* createScene();//MyFirstScene场景创建实现 virtual bool init();//MyFirstScene层的初始化 CREATE_FUNC(MyFirstScene);//创建MyFirstScene的Create方法};
有没有看到熟悉的代码?是的,跟HelloWorld.h差不多一样。只不过少了一个按钮的监听函数。然后具体的代码我就不再多说了,上面也有注释。下面是.cpp的实现:
#include "MyFirstScene.h"//MyFirstScene场景创建实现Scene* MyFirstScene::createScene(){ auto scene = Scene::create();//创建一个场景 auto layer = MyFirstScene::create();//创建一个MyFirstScene层 scene->addChild(layer);//把MyFirstScene层加入刚刚创建的场景中, return scene;//返回这个场景}bool MyFirstScene::init(){ if ( !Layer::init() )//先初始化父类的init方法,如何初始化失败,则创建MyFirstScene层失败 { return false; }Size VisibleSize = Director::getInstance()->getVisibleSize();//获得屏幕大小auto label = Label::createWithSystemFont("Hello,This is MyFirstScene", "fonts/arial.ttf", 30);//创建一个标签label->setPosition(Vec2(VisibleSize.width / 2, VisibleSize.height / 2));//设置位置this->addChild(label);//把标签添加到层上 return true;}这里需要提一下的是,由于我们上面使用了CREATE_FUNC()这个宏定义,所以,在MyFirstScene这个层被创建的时候就会调用它的init()方法,希望读者还没有忘记。
然后我们的这个场景在初始化的过程中只是创建了一个标签加入到场景来。
好了,这样就可以运行了吗?
并不可以,我们知道,在之前提到,场景的管理者是Director这个类。所以我们还没有让Director运行我们这个场景。默认的它是运行HelloWorld场景!
所以,我们需要进入到Appdelegate.cpp中去修改Director运行的场景!
找到这么一句代码:
auto scene = HelloWorld::createScene();
然后修改为:
auto scene = MyFirstScene::createScene();
记得,改之前必须把MyFirstScene.h这个头文件包含进来,就是在Appdelegate.cpp中添加这个头文件。
现在就可以调试运行了~
结果如下:
以上就是实现自己场景的创建!这一篇没讲那么多,因为太多反而适得其反,不如简单慢慢的接受会好一点哈,不过如果属于关键的问题还是要讲清楚哈~下一篇就来讲讲关于场景的切换吧~
- cocos2dx学习之路----第三篇(创建场景)
- cocos2dx学习之路----第四篇(场景切换)
- cocos2dx 3.2 学习篇之三(场景的创建与切换)
- cocos2dx学习之路----第五篇(切换场景的另一种方式:使用popScene与pushScene)
- cocos2dx 3.2 学习篇之二(精灵创建)
- cocos2dx进阶学习之场景切换
- Cocos2dx中创建场景
- cocos2dx之场景特效
- cocos2dx之场景切换
- cocos2dx-3.10学习之场景切换相关函数
- 蜗牛—cocos2dx学习之项目创建
- 学习cocos2d-x之路(3)--创建第一个场景
- cocos2dx学习之路----第六篇(cocos2dx坐标系系统简单窥视)
- cocos2dx学习之路----第十三篇(动作类初探)
- cocos2dx学习之路----第十四篇(内存管理机制)
- cocos2dx学习之路(二)
- 寒風的Cocos2dx之旅之基础1----创建场景
- Cocos2dx学习笔记(二)MyHelloWorldScene场景类
- 静态数据的初始化(Think in java P95页代码解析)
- Swift中闭包的循环引用
- 单点登录cas常见问题(八) - 什么时候会用到代理proxy模式?
- 安卓开发 强制关闭app进程
- 模拟A T M的工作流程编程(-)
- cocos2dx学习之路----第三篇(创建场景)
- Eclipse修改保护色
- Scala的trait
- 请教关于结构体数组的引用出错
- 简单识别脱壳
- 网络请求之HttpClient
- Eclipse+GitHub托管项目
- Could not write metadata for '/RemoteSystemsTempFiles'.
- sicily——Up Stairs