解说cocos2d-x初学者教程(2)
上一节,我们对Cocos2d-x的相关组件有了初步了解。对于已经熟练掌握的同学,可能已经开始进行测试或着手项目开发了;而初学者则需要继续努力学习和掌握。对于正在进行项目开发的同学,接下来我将分享对Cocos2d-x的进一步理解。
一、Cocos2d-x项目开发中的问题
本篇使用的Cocos2d-x版本为Cocos2d-x 3.2。当我们搭建好项目并开始编写代码时,可能会遇到一些问题。比如,某些UI类加载到父级上后,会毫无缘由地崩溃;或者代码行数增多后,维护困难,也难以让他人协助处理。
出现这些问题主要有两个原因:一是对Cocos2d-x了解不够深入;二是缺乏框架概念。具体来说,可能是子级元素在父级addChild之前就调用了父级元素,或者编写代码时没有规划,只是埋头苦干。
我在交流群中常对遇到此类问题的同学打比方:“孩子还在母亲肚子里没出生,怎么能让它去打酱油呢?”“孩子有无限未来,为何不先规划,却直接给它戴上紧箍咒,让它束手束脚?”
我初学Cocos2d-x时也有一个误区,就是在init函数里添加显示UI或需要父级的数据等。虽然在init里添加显示UI的代码本身没问题,但从编程经验来看,这样做并不好。我认为初始化就应该只做初始化的事,UI加载应该放在专门的UI函数中,逻辑处理则放在逻辑函数内,而不是代码到处都是不同功能的代码。
二、MVC框架介绍
了解MVC框架的同学应该清楚它的含义。引用百度对MVC的定义:MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。它采用业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑封装到一个部件中。在改进和个性化定制界面及用户交互时,无需重新编写业务逻辑。MVC被用于映射传统的输入、处理和输出功能到逻辑的图形化用户界面结构中。
我一开始接触MVC框架时也很纠结,对于小项目来说,使用这种框架会很耗时。原本在一个类里就能完成的事情,非要分成管理器、业务、UI、逻辑四份。不过,这也是仁者见仁,智者见智。
(一)MVC框架的好处
- 业务复用性强:可以轻松地将以前的业务应用到任何新项目中。
- 可维护性高:当策划变更逻辑、美术改变UI后,无需对逻辑和业务做过多修改。
- 代码可读性好:能轻松找到问题所在,代码鲜明、整洁、规范。
(二)MVC框架的坏处
会让人觉得繁琐,明明简单的业务,却要写得很复杂。
三、MVC框架在Cocos2d-x上的应用
(一)基类BaseLayer
我编写了基类BaseLayer,根据个人经验,为其赋予了以下几个简单的函数:
- 初始化及数据读取
- 显示及加载UI
- 加载逻辑与返回逻辑
例如,init()函数只负责初始化,showUI()函数只负责显示及加载UI,加载与返回逻辑的函数则负责逻辑处理。
(二)MVC架构与BaseLayer的对应关系
- 模型(model):对应
BaseLayer数据的初始化及本身业务。 - 视图(view):对应
BaseLayerUI的初始化及加载。 - 控制器(controller):对应
BaseLayer的逻辑处理及返回。
(三)BaseLayer的实现步骤
init();GetReadData();LoadUILogic();showUI();ReturnLogic();
(四)实际功能业务示例:装备升级功能
假设我们有实现装备升级功能的需求。以BaseLayer为基类,派生出业务类Equipment_LvUp。以下是实现代码:
Equipment_LvUp* m_pEquip = Equipment_LvUp::create();
this->addChild(m_pEquip);
m_pEquip->GetReadData(...);
m_pEquip->LoadUILogic(...);
m_pEquip->showUI();
从顺序上可以看出,先初始化数据,然后获取业务必要数据,加载业务逻辑,最后显示业务视图UI。这样做的好处是,如果出现问题,可以轻松判断是数据、显示还是逻辑方面的问题。而且当业务逻辑变更时,可以根据需求调整代码,代码既鲜明又直观。此外,还可以将业务放在不同的管理器下随时调用,非常方便。
我们还可以根据不同需求对其进行重构和功能提升,如资源的异步加载、业务算法优化等。也可以将代码分为管理器、业务、UI、逻辑四个类来编写,这些方法都可以,这里只是提供一种思路和方式。
四、MVC框架的通俗理解及在Cocos2d-x demo中的体现
通俗来讲,MVC框架就像玩英雄联盟,事件通过鼠标和键盘响应,这是直观的逻辑处理。每次点击QWER键,都会通过键盘映射到相应的逻辑进行处理,逻辑处理完后通知相关UI进行动画或渲染等,然后UI提供新的界面供玩家进行新的选择。
从Cocos2d-x的demo中也能看出这种框架模式。在逻辑处理方面,根据逻辑引用计数的增加和减少采用不同的类进行处理,每个类只负责自身的显示及动画效果。
五、总结
简单的MVC架构模式就介绍到这里,下一期将讲解整个游戏工程的架构。