cocos2d-x游戏开发系列教程-超级玛丽06-CMGameScene
背景
在CMMenuScene中,当用户点击开始游戏时,导演让场景进入到CMGameScene
头文件
class CMGameScene : public cocos2d::CCLayer,public CMReceiver
{
public:
// there's no 'id' in cpp, so we recommend returning the class instance pointer
static cocos2d::CCScene* CreateGameScene(); private:
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init(); // a selector callback
void menuCloseCallback(CCObject* pSender); // implement the "static node()" method manually
CREATE_FUNC(CMGameScene); void OnMsgReceive( int enMsg,void* pData,int nSize );
void OnCallPerFrame(float dt); void InitControlUI();
void OnMenuLeftKeyCallBack(CCObject *pSender);
void OnMenuRightKeyCallBack(CCObject *pSender);
void OnMenuJumpKeyCallBack(CCObject *pSender);
void OnMenuFireKeyCallBack(CCObject *pSender); enum
{
enTagMap,
enTagMenu,
}; enum
{
enTagLeftKey,
enTagRightKey,
enTagJumpKey,
enTagFireKey,
}; void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);
void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);
void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);
void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent); };
OnMenu系列函数是响应按钮
ccTouches系列函数是触摸响应函数
onMsgReceive是自定义的消息处理函数
OnCallPerFrame是定时刷新处理函数
init函数则是该scene创建时,被回调的初始化函数
init函数
bool CMGameScene::init()
{
do
{
//super init first
if (CCLayer::init()==NULL)
{
return false;
} CMGameMap* pGameMap = CMGameMap::CreateGameMap("MarioMap1.tmx");
CC_BREAK_IF(pGameMap==NULL);
pGameMap->setPosition(ccp(0,96));
addChild(pGameMap,enZOrderBack,enTagMap); //注册Update函数
this->schedule(schedule_selector(CMGameScene::OnCallPerFrame)); InitControlUI(); return true;
} while (false);
CCLog("Fun CMGameScene::init Error!");
return false;
}
在init函数里,主要的工作:
1)创建背景地图
2)注册定时回调函数
3)初始化控件
具体的细节,大家可以下载代码看,在这里大家了解框架即可。
OnCallPerFrame(float dt)
游戏的逻辑都在OnCallPerFrame中,代码如下:
void CMGameScene::OnCallPerFrame(float dt)
{
do
{
CMGameMap* pMap = dynamic_cast<CMGameMap*>(getChildByTag(enTagMap));
CC_BREAK_IF(pMap==NULL);
pMap->OnCallPerFrame(dt); //CCLog("TileType = %d",pMap->HeroPosToTileType(pHero->getPosition()));
//CCLog("HeroPosX=%f HeroPosY=%f",pHero->getPositionX(),pHero->getPositionY());
return;
} while (false);
CCLog("fun CMGameScene::Update Error!");
}
从以上代码可以看出,游戏的逻辑,最终还是转到了CMGameMap这个地图类中。
所以CMGameScene只是个框,真正处理整个游戏逻辑的还是CMGameMap类
cocos2d-x游戏开发系列教程-超级玛丽06-CMGameScene的更多相关文章
- cocos2d-x游戏开发系列教程-超级玛丽10-怪物与马里奥冲突检测
在超级玛丽游戏中,马里奥在移动,怪物也在移动,当他们遇见时,需要判断是马里奥身亡还是怪物身亡. 这个判断的代码在怪物类的检测函数实现中. 比如蘑菇怪的冲突检测函数: bool CMMonsterMus ...
- cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap
背景 在上一篇博客中,我们提到CMGameScene,但是CMGameScene只是个框架,实际担任游戏逻辑的是CMGameMap类,这个博文就来了解下CMGameMap 头文件 class CMGa ...
- cocos2d-x游戏开发系列教程-超级玛丽08-消息机制
在超级玛丽游戏里,地图类CMGameMap负责所有的程序逻辑,它包含了背景地图,包含了游戏元素精灵,当游戏中的精灵之间发生碰撞时,比如马里奥撞上砖头这种事情发生时,马里奥对象本身不知道怎么处理这个逻辑 ...
- cocos2d-x游戏开发系列教程-超级玛丽05-CMMenuScene
代码下载链接 http://download.csdn.net/detail/yincheng01/6864893 解压密码:c.itcast.cn 背景 上一篇博文提到appDelegate,在该类 ...
- cocos2d-x游戏开发系列教程-超级玛丽09-怪物激活与移动
在游戏中,很多怪物本身是会移动的,这里主要有蘑菇怪,乌龟等. 说起怪物的移动,首先在游戏里先要考虑怪物的抽象和设计. 在CMMonster.h中,有个类CMMonsterBasic,这个类抽象了所有的 ...
- cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(五)-地图卷动
马里奥在平移的过程中,涉及到地图的卷动问题. 在这个游戏里,地图比窗口大,窗口只是显示了地图的一部分,因此马里奥在移动的时候,移动到一定位置之后要卷动地图,否则马里奥移动到窗口右边之后......那结 ...
- cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(三)-按键处理
在地图初始化好了之后,就开始移动马里奥吧,我在windows下,是使用键盘来移动马里奥的 w是跳,d是前进,a是后退,那么在程序里是怎么来获取这个按键的呢? 普通的windows程序,在按键之后,会有 ...
- cocos2d-x游戏开发系列教程-超级玛丽04-AppDelegate
代码下载链接 http://download.csdn.net/detail/yincheng01/6864893 解压密码:c.itcast.cn 背景 上一篇博文提到在CCApplication: ...
- cocos2d-x游戏开发系列教程-超级玛丽02-代码结构
代码下载链接 http://download.csdn.net/detail/yincheng01/6864893 解压密码:c.itcast.cn 前景回顾 上一篇博文提到超级马里奥的游戏效果,大家 ...
随机推荐
- getline函数
在我的印象中,getline函数常常出如今自己的视野里,模糊地记得它常常常使用来读取字符串 .可是又对它的參数不是非常了解,今天又用到了getline函数,如今来细细地总结一下: 首先要明确设计get ...
- 笔记-Node.js中的核心API之HTTP
最近正在学习Node,在图书馆借了基本关于Node的书,同时在网上查阅资料,颇有收获,但是整体感觉对Node的理解还是停留在一个很模棱两可的状态.比如Node中的模块,平时练习就接触到那么几个,其他的 ...
- !!!易控INSPEC组态软件开发小结——-一次工程文件损坏和处理经过
从加入红橡开始熟悉和使用易控(INSPEC)组态软件,值得赞扬的是INSPEC的开放性和对C#语言的支持,除此之外,便也没有感觉它与其他组态软件有太多优势,有人说INSPEC软件授权比国内其他同类的组 ...
- 多个viewpager可能产生的问题
由于Fragment的方便性,现在很多人开始大量使用Fragment. 今天使用时遇到各问题,记录下来并分享下. 使用Fragment都会用FragmentActivity ,特别是在用到ViewPa ...
- .Net Web开发中实现剪切板功能
我要实现的功能是:在列表页,通过一个按钮复制对应的文章Url,如下图: 如下代码: <a class="btn btn-success copy" href=&quo ...
- PHP-购物网站开发设计(一)
2015-07-6 开始使用PHP完成简单购物网站的设计,首先要选择合适的软件平台,所以今天先记录平台的选择与搭建: 我选择使用Apache24 + PHP 5.6 + MySQL 开发环境完成PHP ...
- string模板
string模块中包含了一个很有用的Template类,可以先写好字符串模板,后期使用的时候直接替换就可以了. 模板中使用$作为占位符前缀,使用{}包裹占位符以支持间断的标量名,使用$ ...
- python中3个帮助函数help、dir、type的使用
1.help函数:查看模块.函数.变量的详细说明: 查看模块 help("modules") 查看包 help("json") 查看类 help(json.J ...
- Unit Tests Tool - <What is “Mock You”> The introduction to moq #Reprinted#
From: http://www.cnblogs.com/wJiang/archive/2010/02/21/1670632.html Moq即Mock You Framework,故名思意是一个类似 ...
- IOS本地化。
1,项目名本地化 点击项目,蓝色图标->info 最下面+号,添加chinese本地化. Supporting Files->infoPlist.strings 下会有两个文件,有一个是设 ...