当前位置: 首页 > news >正文

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类


转载于:https://www.cnblogs.com/new0801/p/6177218.html

相关文章:

  • 使用pip命令报You are using pip version 9.0.3, however version 18.0 is available pip版本过期.解决方案...
  • JavaScript访问对象属性
  • Zeit.co 免费服务器平台
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • vue入门知识点
  • 微信公众平台 学习笔记(一)
  • 我的本科学习计划
  • Hibernate -- 操作持久化对象
  • POI 导入导出时异常[java.io.IOException: Broken pipe]
  • linux安全基本防护
  • 网络安全与主机基本防护-linux鸟哥的私房菜服务器篇07(阅读笔记)
  • Andrew Ng经典机器学习课程的Python实现(第1部分)
  • TCP/IP 笔记三
  • R中绘制聚类的离散图
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • (三)从jvm层面了解线程的启动和停止
  • 【刷算法】从上往下打印二叉树
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • iOS 系统授权开发
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • java8-模拟hadoop
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Java应用性能调优
  • JWT究竟是什么呢?
  • leetcode388. Longest Absolute File Path
  • Linux各目录及每个目录的详细介绍
  • passportjs 源码分析
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Spring核心 Bean的高级装配
  • Vue 重置组件到初始状态
  • 阿里云前端周刊 - 第 26 期
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 如何利用MongoDB打造TOP榜小程序
  • 使用Swoole加速Laravel(正式环境中)
  • nb
  • ​configparser --- 配置文件解析器​
  • #NOIP 2014# day.1 T2 联合权值
  • #微信小程序:微信小程序常见的配置传旨
  • (06)Hive——正则表达式
  • (3)STL算法之搜索
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)基于IDEA的JAVA基础12
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)VC++中ondraw在什么时候调用的
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .net framework4与其client profile版本的区别
  • .net 后台导出excel ,word
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)