背景

在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的更多相关文章

  1. cocos2d-x游戏开发系列教程-超级玛丽10-怪物与马里奥冲突检测

    在超级玛丽游戏中,马里奥在移动,怪物也在移动,当他们遇见时,需要判断是马里奥身亡还是怪物身亡. 这个判断的代码在怪物类的检测函数实现中. 比如蘑菇怪的冲突检测函数: bool CMMonsterMus ...

  2. cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap

    背景 在上一篇博客中,我们提到CMGameScene,但是CMGameScene只是个框架,实际担任游戏逻辑的是CMGameMap类,这个博文就来了解下CMGameMap 头文件 class CMGa ...

  3. cocos2d-x游戏开发系列教程-超级玛丽08-消息机制

    在超级玛丽游戏里,地图类CMGameMap负责所有的程序逻辑,它包含了背景地图,包含了游戏元素精灵,当游戏中的精灵之间发生碰撞时,比如马里奥撞上砖头这种事情发生时,马里奥对象本身不知道怎么处理这个逻辑 ...

  4. cocos2d-x游戏开发系列教程-超级玛丽05-CMMenuScene

    代码下载链接 http://download.csdn.net/detail/yincheng01/6864893 解压密码:c.itcast.cn 背景 上一篇博文提到appDelegate,在该类 ...

  5. cocos2d-x游戏开发系列教程-超级玛丽09-怪物激活与移动

    在游戏中,很多怪物本身是会移动的,这里主要有蘑菇怪,乌龟等. 说起怪物的移动,首先在游戏里先要考虑怪物的抽象和设计. 在CMMonster.h中,有个类CMMonsterBasic,这个类抽象了所有的 ...

  6. cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(五)-地图卷动

    马里奥在平移的过程中,涉及到地图的卷动问题. 在这个游戏里,地图比窗口大,窗口只是显示了地图的一部分,因此马里奥在移动的时候,移动到一定位置之后要卷动地图,否则马里奥移动到窗口右边之后......那结 ...

  7. cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(三)-按键处理

    在地图初始化好了之后,就开始移动马里奥吧,我在windows下,是使用键盘来移动马里奥的 w是跳,d是前进,a是后退,那么在程序里是怎么来获取这个按键的呢? 普通的windows程序,在按键之后,会有 ...

  8. cocos2d-x游戏开发系列教程-超级玛丽04-AppDelegate

    代码下载链接 http://download.csdn.net/detail/yincheng01/6864893 解压密码:c.itcast.cn 背景 上一篇博文提到在CCApplication: ...

  9. cocos2d-x游戏开发系列教程-超级玛丽02-代码结构

    代码下载链接 http://download.csdn.net/detail/yincheng01/6864893 解压密码:c.itcast.cn 前景回顾 上一篇博文提到超级马里奥的游戏效果,大家 ...

随机推荐

  1. Web Service 入门例子

    在网上很常见的一个列子,实现计算器,看完总得自己练练,不然一段时间不接触又忘了 新建一个空网页,因为.net framework 4.0 不能直接建web 服务,只能在项目中添加 然后在项目中添加We ...

  2. java 錯誤集錦.

    (1)加载驱动成功com.microsoft.sqlserver.jdbc.SQLServerException: 不支持此服务器版本.目标服务器必须是 SQL Server 2000 或更高版本.链 ...

  3. C# 微信公众平台开发(3)-- 接受/发送消息

    1.接收事件 关注/取消关注事件: 用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL. 通过微信返回的XML,我们通过代码 就可以作相应的处理: 先获取返回的信息: if (Ht ...

  4. SQL Server 取前一天的0点和23点59分59秒

    DECLARE @startDate1 DATE; DECLARE @startDate DATETIME; ,@startDate1); ,CONVERT(DATETIME,@startDate1) ...

  5. Android 开发笔记 “弹出框”

    AlertDialog.Builder builder = new AlertDialog.Builder(Activity.this); builder.setMessage("Are y ...

  6. php平均拆分大文件为N个小文件

    用PHP程序拆分大文件为N个小文件 /* 假设有文件data.log , 内容如下,行数很多,假设有上亿条数据,文件大小大概在800M左右 92735290 80334472 49114074 871 ...

  7. bzoj 1040: [ZJOI2008]骑士 树形dp

    题目链接 1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3054  Solved: 1162[Submit][S ...

  8. OutputDebugString 输出信息到调试器

    #include <Windows.h>#include <stdio.h>#include <stdarg.h> void __cdecl odprintf(co ...

  9. COM编程之IUnknown接口

    COM组件其实是一种特殊的类,遵循一个统一的标准,使到各个软件都可以通过某种方法访问这个类的函数和方法,也就可以做到组件通用. com就是统一的标准--通过接口来调用com组件.接口是你的com组件能 ...

  10. JSP中的相对路径和绝对路径(转)

    1.首先明确两个概念: 服务器路径:形如:http://192.168.0.1/的路径 Web应用路径:形如:http://192.168.0.1/yourwebapp的路径 2.关于相对路径与绝对路 ...