|   版权声明:本文为博主原创文章,未经博主允许不得转载。

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之创建自己的场景类的更多相关文章

  1. (NO.00005)iOS实现炸弹人游戏(三):从主场景类谈起

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我又粗粗看了下整个项目的代码,比较多: 不少类都与其他类有着千丝 ...

  2. (NO.00004)iOS实现打砖块游戏(五):游戏场景类

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 创建游戏场景类头文件 在Xcode创建新GameScene类,继 ...

  3. 工厂模式,根据ID创建对应的实例类

    工厂模式,根据ID创建对应的实例类 // // main.cpp // TestCPP1 // // Created by bianchx on 15/4/27. // Copyright (c) 2 ...

  4. 创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法)。

    创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法). ackage com.chuoji.text01; pub ...

  5. [原创]cocos2d-x研习录-第二阶 概念类之场景类(CCScene)

    场景类CCScene是Cocos2D-x在屏幕显示的内容,相当于游戏关卡或界面.CCDirector任何时候只能显示一个场景CCScene,游戏中可能存在若干场景,CCDirector通过场景切换达到 ...

  6. [置顶] 【玩转cocos2d-x之七】场景类CCScene和布景类CCLayer

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12708811 场景类CCScene和布景类CCLayer都是作为一个容器来使 ...

  7. 如何创建一个要素数据类 IField,IFieldEdit,IFields,IFieldsEditI,GeometryDef,IGeometryDefEdit接口

    如何创建一个要素数据类 创建要素类用到了IFeatureWorkspace.CreateFeatureClass方法,在这个方法中有众多的参数,为了满足这些参数,我们要学习和了解下面的接口. IFie ...

  8. 类和对象的创建过程(元类,__new__,__init__,__call__)

    一. type() 1.创建类的两种方式 方式一 class MyClass(object): def func(self,name): print(name) myc = MyClass() pri ...

  9. 【原创】Python 对象创建过程中元类, __new__, __call__, __init__ 的处理

    原始type: type是最原始的元类,其__call__方法是在你使用" t_class = type(classname_string, base_classes_tuple, attr ...

随机推荐

  1. Java并发AtomicIntegerArray类

    java.util.concurrent.atomic.AtomicIntegerArray类提供了可以以原子方式读取和写入的底层int数组的操作,还包含高级原子操作. AtomicIntegerAr ...

  2. Seq2Seq和Attention机制入门介绍

    1.Sequence Generation 1.1.引入 在循环神经网络(RNN)入门详细介绍一文中,我们简单介绍了Seq2Seq,我们在这里展开一下 一个句子是由 characters(字) 或 w ...

  3. Dubbo 系列(07-4)集群容错 - 集群

    BDubbo 系列(07-4)集群容错 - 集群 [toc] Spring Cloud Alibaba 系列目录 - Dubbo 篇 1. 背景介绍 相关文档推荐: Dubbo 集群容错 - 实战 D ...

  4. 恐怖的奴隶主(bob)

    题目描述 小L热衷于undercards. 在undercards中,有四个格子.每个格子要么是空的,要么住着一只BigBob. 每个BigBob有一个不超过k的血量:血量减到0视为死亡.那个格子随即 ...

  5. Logstash,Fluentd, Logtail对比伤害

    摘要: 针对主流日志采集客户端(Logstash,Fluentd,以及日志服务客户端Logtail)进行功能.性能和稳定性测评 日志收集的场景 DT时代,数以亿万计的服务器.移动终端.网络设备每天产生 ...

  6. python基础----斐波那契数列

    python实现斐波那契数列的三种方法 """ 斐波那契数列 0,1,1,2,3,5,8,13,21,... """ # 方法一:while ...

  7. Windows IIS PHP7 连接 SQLServer 2012

    下载 php7 对 SQL Server 的扩展 https://www.microsoft.com/en-us/download/details.aspx?id=20098 下载后 安装到一个 目录 ...

  8. NOIP后一波总结

    我的山寨较为可靠分数为305(洛谷是真的水~显然不能用啊,果断换了一组合适的数据) 据大神们估计,得奖的分数在280, 我肯定是没有啥希望了.(我旁边的lxy同学从初二开始,每次以超分数线至少60分的 ...

  9. windows10图形化连接CentOS7

    前提:CentOS已经安装图形化,安装教程可以百度 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release (Core) 安装 ...

  10. 【学习总结】Python-3-多个变量赋值

    菜鸟教程-Python3-基本数据类型 同时为多个变量赋值的两种格式: 连等:看起来可能错误但事实上Python可以这样的.... 一团变量对应一团值:比较常见又省事的格式 END