背景

在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. stl非变易算法(二)

    这里接着上篇stl非变易算法(一)进行总结.主要解析算法函数count.count_if.mismatch.equal.search.search_n以及find_end.给出算法函数的实现及測试用例 ...

  2. Tomcat 的context.xml

    1. 在tomcat 5.5之前: --------------------------------------------------------------- Context体如今/conf/se ...

  3. jQuery的hover()方法(笔记)

    因为mouseover和mouseout经常一起写,所以出现了hover() hover(function(){},function(){});第一个参数为鼠标移入运行的函数,第二个为鼠标离开运行的函 ...

  4. 小猪猪逆袭成博士之C++基础篇(一)数据精度、强制类型转换、变量命名规则

    小猪猪逆袭成博士之C++基础篇(一) 关键词: 数据精度.强制类型转换.变量命名规则 综述: 1.大多数编程语言通过两种方式来进一步补充其特征:一是赋予程序员自定义数据类型的权利(C++中的类):二是 ...

  5. C++内联函数与宏定义

    用内联取代宏: 1.内联可调试: 2.可进行类型安全检查或自动类型转换: 3.可访问成员变量. 另外,定义在类声明中的成员函数自动转化为内联函数. 文章(一) 内联函数与宏定义 在C中,常用预处理语句 ...

  6. BZOJ 3156: 防御准备( dp + 斜率优化 )

    dp(i)表示处理完[i,n]且i是放守卫塔的最小费用. dp(i) = min{dp(j) + (j-i)(j-i-1)/2}+costi(i<j≤N) 然后斜率优化 ------------ ...

  7. servlet三种实现方式之二继承GenericServlet开发

    servlet有三种实现方式: 1.实现servlet接口 2.继承GenericServlet 3.通过继承HttpServlet开发servlet 第二种示例代码如下(已去掉包名): //这是第二 ...

  8. Android 开发笔记“程序安装包APK的制作”

    资源来源:http://blog.csdn.net/qualcent/article/details/6959547 完成Android项目后,需要将程序打包成APK文件(Android Packag ...

  9. idea中使用sbt构建scala项目及依赖

    1.安装scala插件 http://www.cnblogs.com/yrqiang/p/5310700.html 2. 详细了解sbt: http://www.scala-sbt.org/0.13/ ...

  10. pyhton10min系列之程序员的浪漫-足迹生成器,有视频教程

    记录去过的足迹 本文为原创文章 项目主页 跪求star 程序员的浪漫,我女朋友蘑菇喜欢旅游,于是我做了这个,记录2015一起去过的地方,祝她圣诞快乐 如果觉得对你有帮助,github求个star 视频 ...