cocos2d之创建自己的场景类
| 版权声明:本文为博主原创文章,未经博主允许不得转载。
1. 首先创建.h的头文件,然后在将一些图片声音素材加到resource文件夹内,最后在创建.cpp文件;
.h头文件中创建一个类,此类一般继承自Layer,首先有一个静态的创建场景的方法,然后是一个初始化方法,还有一个CREATE_FUNC宏; .cpp中就是对.h中class中定义的方法来进行实现
效果图:

代码:
MyGameScene.h:
#ifndef _MYGAME_SCENE_H_
#define _MYGAME_SCENE_H_ #include "cocos2d.h"
class MyGame : public cocos2d::Layer
{
public:
static cocos2d::Scene* createScene(); virtual bool init(); CREATE_FUNC(MyGame);
}; #endif // _MYGAME_SCENE_H_
在MyGameScene.h中,我们创建了一个MyGame的类,这个类继承自图层Layer;首先我们创建了一个静态的方法createScene();,这个方法是我们创建场景的一个方法;还有init() 和 宏CREATE_FUNC;CREATE_FUNC用来为一个类似CCLayer类的特定的类增加一个create函数,我们使用CREATE_FUNC来创建图层Layer;
MyGameScene.cpp:
#include "MyGameScene.h" USING_NS_CC;
//一个名字空间;它表示着using namespace cocos2d
//这是USING_NS_CC的定义: #define USING_NS_CC using namespace cocos2d Scene* MyGame::createScene()
{
auto scene = Scene::create();
auto layer = MyGame::create();
scene->addChild(layer);
return scene;
} bool MyGame::init()
{
if (!Layer::init()) //判断父类图层是否初始化
{
return false;
} Size visibleSize = Director::getInstance()->getVisibleSize();
//获取当前运行窗口的大小
Vec2 origin = Director::getInstance()->getVisibleOrigin();
//获取当前窗口的原点坐标 /////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
auto bg = Sprite::create("bg1.png");
bg->setPosition(Vec2(visibleSize.width / + origin.x, visibleSize.height / + origin.y)); //下面是将图片调节到与窗口同比例的缩放;图片 / 窗口
float xs = visibleSize.width / bg->getContentSize().width;
float ys = visibleSize.height / bg->getContentSize().height;
bg->setScale(xs, ys);
//setScale()是一个缩放方法;若要是图片铺满整个显示框,可以使用此函数要将图片与运行框同比例缩放,同时如果想放大或缩小每一个节点的大小,///也可以使用可方法
this->addChild(bg,); /////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
auto mouse = Sprite::create("mouse.png");
mouse->setPosition(Vec2(visibleSize.width / + origin.x, visibleSize.height / + origin.y));
mouse->setScale(0.5, 0.5); //节点的缩放,这里是缩小
this->addChild(mouse, ); auto hammer = Sprite::create("hammer.png");
hammer->setPosition(Vec2(visibleSize.width / 2.5 + origin.x, visibleSize.height / + origin.y));
hammer->setScale(0.7, 0.7);
this->addChild(hammer); /////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
auto label = Label::createWithTTF("Whac-a-mole", "fonts/Marker Felt.ttf", );
//createWithTTF是创建标签文本的方法,其中第一个参数是要显示的内容,第二个是字体格式(fonts/Marker Felt.ttf
//表示在fonts文件夹下的Marker Felt.ttf字体,第三个参数是字体的大小,数字越大字体越大)
label->setPosition(Vec2(origin.x + visibleSize.width / ,
origin.y + visibleSize.height - label->getContentSize().height)); //Vec2(x,y);表示的是坐标点位置,setPosition()是设置位置的方法,给出位置,就能到特定的位置
this->addChild(label,); auto start = Label::createWithTTF("Start", "fonts/Marker Felt.ttf", );
start->setPosition(Vec2(origin.x + visibleSize.width / ,
(origin.y + visibleSize.height - (visibleSize.height / ))));
this->addChild(start, ); auto Help = Label::createWithTTF("Help", "fonts/Marker Felt.ttf", );
Help->setPosition(Vec2(origin.x + visibleSize.width / ,
(origin.y + visibleSize.height - (visibleSize.height / ) - (Help->getContentSize().height*1.5))));
this->addChild(Help, ); //这里的这个2表示的是z轴(数字越大,就越在上层,不容易被覆盖) auto Exit = Label::createWithTTF("Exit", "fonts/Marker Felt.ttf", );
Exit->setPosition(Vec2(origin.x + visibleSize.width / ,
(origin.y + visibleSize.height - (visibleSize.height / ) - ((Exit->getContentSize().height*1.5)*))));
this->addChild(Exit, );
//getContentSize()表示获取当前对象节点的高或框;Exit->getContentSize().height表示取得对象节点Exit的高度
return true;
}
在自己写好.h和.cpp之后还要改两个地方才能运行你所写场景,因为程序从main.cpp运行到代理程序AppDelegate时,由AppDelegate中的方法来运行游戏,因此要AppDelegate中的头文件要包含你写.h文件;如下:

再将applicationDidFinishLaunching()方法中创建场景的对象
由:
改为:
其中的HelloWorld和MyGame均是.h文件中的类名;改好即可,若不该这两项的话运行的还是HelloWorldScene,而不是自己写的MyGameScene
cocos2d之创建自己的场景类的更多相关文章
- (NO.00005)iOS实现炸弹人游戏(三):从主场景类谈起
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我又粗粗看了下整个项目的代码,比较多: 不少类都与其他类有着千丝 ...
- (NO.00004)iOS实现打砖块游戏(五):游戏场景类
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 创建游戏场景类头文件 在Xcode创建新GameScene类,继 ...
- 工厂模式,根据ID创建对应的实例类
工厂模式,根据ID创建对应的实例类 // // main.cpp // TestCPP1 // // Created by bianchx on 15/4/27. // Copyright (c) 2 ...
- 创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法)。
创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法). ackage com.chuoji.text01; pub ...
- [原创]cocos2d-x研习录-第二阶 概念类之场景类(CCScene)
场景类CCScene是Cocos2D-x在屏幕显示的内容,相当于游戏关卡或界面.CCDirector任何时候只能显示一个场景CCScene,游戏中可能存在若干场景,CCDirector通过场景切换达到 ...
- [置顶] 【玩转cocos2d-x之七】场景类CCScene和布景类CCLayer
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12708811 场景类CCScene和布景类CCLayer都是作为一个容器来使 ...
- 如何创建一个要素数据类 IField,IFieldEdit,IFields,IFieldsEditI,GeometryDef,IGeometryDefEdit接口
如何创建一个要素数据类 创建要素类用到了IFeatureWorkspace.CreateFeatureClass方法,在这个方法中有众多的参数,为了满足这些参数,我们要学习和了解下面的接口. IFie ...
- 类和对象的创建过程(元类,__new__,__init__,__call__)
一. type() 1.创建类的两种方式 方式一 class MyClass(object): def func(self,name): print(name) myc = MyClass() pri ...
- 【原创】Python 对象创建过程中元类, __new__, __call__, __init__ 的处理
原始type: type是最原始的元类,其__call__方法是在你使用" t_class = type(classname_string, base_classes_tuple, attr ...
随机推荐
- CF561做题
C题: 一期思路:我们发现如果x,y满足条件,那么{x,-y} {-x,y} {-x,-y}也满足条件.那么我们可以只讨论|x| |y|是否满足条件,如果满足条件,那么对ans的贡献是|x|出现次数* ...
- 用select实现多客户端连接
server.c 把accept也看成是一个read类型的函数, 于是我们可以把sockfd也放入到select中 maxi标记当前客户端连接数组的最大下标 select返回值为当前已经准备就绪的fd ...
- python 装饰器 第四步:基本装饰器的实现
#第四步:基本装饰器的实现 #用于扩展基本函数的函数 def kuozhan(func): #内部函数(扩展之后的eat函数) def neweat(): #以下三步就是扩展之后的功能,于是我们把这三 ...
- Java导入
导入(import)声明用于将任何类型导入编译单元.导入(import)声明出现在包声明之后,第一个类型声明之前. 有两种类型的导入声明: 单类型导入声明 按需导入声明 单类型导入声明 单类型导入声明 ...
- Timus 1712. Cipher Grille 题解
版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/.未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...
- vue,数组循环中src路径下图片总是不展示
每次数组中带图片的src,图片总是不展示,搞得都怀疑是不是姿势不对.经过各方查看,还真不对 原因是因为图片路径在assets,所以需要require一下.其实就是require('path') 如a[ ...
- Vue中子组件数据跟着父组件改变和父组件数据跟着子组件改变的方法
一,子组件数据跟着父组件改变 父组件的代码 <template> <div class="home"> <img alt="Vue logo ...
- ubuntu下安装chrome谷歌浏览器
百度“chrome”然后登录谷歌浏览器官网下载deb包 cd到下载的目录下 sudo dpkg -i google-chrome*; 提示缺少依赖包,打入如下命令 sudo apt-get -f in ...
- brew install ''package卡在Updating Homebrew
关闭自动更新: export HOMEBREW_NO_AUTO_UPDATE=true
- QProcess
QT应用在windows系统下调用bat脚本,居然报错了.该BAT脚本,是用来检查svn.exe这个命令行工具,是否在当前系统里存在.在cmd终端里,一直是可正常执行的.但是在windows7家庭中文 ...