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 ...
随机推荐
- Java并发AtomicIntegerArray类
java.util.concurrent.atomic.AtomicIntegerArray类提供了可以以原子方式读取和写入的底层int数组的操作,还包含高级原子操作. AtomicIntegerAr ...
- Seq2Seq和Attention机制入门介绍
1.Sequence Generation 1.1.引入 在循环神经网络(RNN)入门详细介绍一文中,我们简单介绍了Seq2Seq,我们在这里展开一下 一个句子是由 characters(字) 或 w ...
- Dubbo 系列(07-4)集群容错 - 集群
BDubbo 系列(07-4)集群容错 - 集群 [toc] Spring Cloud Alibaba 系列目录 - Dubbo 篇 1. 背景介绍 相关文档推荐: Dubbo 集群容错 - 实战 D ...
- 恐怖的奴隶主(bob)
题目描述 小L热衷于undercards. 在undercards中,有四个格子.每个格子要么是空的,要么住着一只BigBob. 每个BigBob有一个不超过k的血量:血量减到0视为死亡.那个格子随即 ...
- Logstash,Fluentd, Logtail对比伤害
摘要: 针对主流日志采集客户端(Logstash,Fluentd,以及日志服务客户端Logtail)进行功能.性能和稳定性测评 日志收集的场景 DT时代,数以亿万计的服务器.移动终端.网络设备每天产生 ...
- python基础----斐波那契数列
python实现斐波那契数列的三种方法 """ 斐波那契数列 0,1,1,2,3,5,8,13,21,... """ # 方法一:while ...
- Windows IIS PHP7 连接 SQLServer 2012
下载 php7 对 SQL Server 的扩展 https://www.microsoft.com/en-us/download/details.aspx?id=20098 下载后 安装到一个 目录 ...
- NOIP后一波总结
我的山寨较为可靠分数为305(洛谷是真的水~显然不能用啊,果断换了一组合适的数据) 据大神们估计,得奖的分数在280, 我肯定是没有啥希望了.(我旁边的lxy同学从初二开始,每次以超分数线至少60分的 ...
- windows10图形化连接CentOS7
前提:CentOS已经安装图形化,安装教程可以百度 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release (Core) 安装 ...
- 【学习总结】Python-3-多个变量赋值
菜鸟教程-Python3-基本数据类型 同时为多个变量赋值的两种格式: 连等:看起来可能错误但事实上Python可以这样的.... 一团变量对应一团值:比较常见又省事的格式 END