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 前景回顾 上一篇博文提到超级马里奥的游戏效果,大家 ...
随机推荐
- js字面量
以前一直对js字面量模棱两可. '字面量是一种表示值的记法.' js字面量(literal) 分为以下几个 number literal 8 就是数字字面量 string liter ...
- string s = HttpContext.Current.Server.MapPath("");
string s = HttpContext.Current.Server.MapPath(""); 获取当前文件夹路径 而后用相对路径读取图片
- CentOS修改IP
编辑 /etc/sysconfig/network-scripts/ifcfg-eth0 然后 service network restart DEVICE=eth0BOOTPROTO=noneNM_ ...
- IOS 特定于设备的开发:UIDevice
UIDevice类展示了一些关键的特定于设备的属性,包括使用的iPhone ,Ipad或iPod Touch型号.设备名称.以及OS名称和版本. 他是一种一站式解决方案,用于提取出某些系统详细信息.每 ...
- Qt实战之开发CSDN下载助手 (3)(结束篇)
再次申明下,开发这款助手,主要是用来学习交流,并不是用来开发什么刷积分的软件. 好了,言归正传,这次,主要的分析下CSDN的下载,评论,验证码获取机制等等. 好,回到第二篇,当我们成功登陆时,CSDN ...
- SQL中采用Newtonsoft.Json处理json字符串
原文 SQL中采用Newtonsoft.Json处理json字符串 使用环境: SQL Server2005; VS2010; 关于SQL中部署CLR程序集的方法,网上一搜一大把,需要了解的自行查阅, ...
- 转:CI配置SMARTY
1.到相应站点下载Smarty的源码包:2.将源码包里面的libs文件夹copy到CI的项目目录下面的libraries文件夹下,并重命名为Smarty:3.在目录 application/libra ...
- BZOJ 2463 谁能赢呢? (博弈论)
题解:简单博弈论 #include <cstdio> int main(){ int n; while(scanf("%d",&n),n!=0) if (n&a ...
- Baby Step Gaint Step
给定同余式,求它在内的所有解,其中总是素数. 分析:解本同余式的步骤如下 (1)求模的一个原根 (2)利用Baby Step Giant Step求出一个,使得,因为为素数,所以有唯一解. (3)设, ...
- Python生成随机数的方法
这篇文章主要介绍了Python生成随机数的方法,有需要的朋友可以参考一下 如果你对在Python生成随机数与random模块中最常用的几个函数的关系与不懂之处,下面的文章就是对Python生成随机数与 ...