咱们的目标,首先是为逻辑开发程序员屏蔽掉底层细节。其次给他们提供简明易用,同时又能够扩展的类和接口。程序员
那么对于游戏逻辑的开发者来讲,游戏是什么?数据库
对这个问题的答案,我是从话剧中获得的灵感。话剧是在一个布好景的舞台上,一些演员按照剧本做出的行为。游戏跟这个很相似,只是多了玩家控制这个因素,能作出动做的也不只是演员,还包括许多其余有响应的物体。所以游戏基本能够定义成:在一个或多个舞台上,对象在玩家输入或AI的控制下做出的行为。网络
由这个定义,获得三个基本的类。舞台类Stage,对象类Object和行为类Action。之前的游戏许可能是把行为做为对象的成员函数来实现,实践证实那样的设计不尽合理,更好的设计是把行为从对象中分离出来,用不一样的行为组合来实现特定对象的功能。cocos2d自己就是这么设计的,这里沿用cocos2d的设计思想。由于存在不少行为,行为类Action其实是个类族,有不少派生类。框架
为了管理舞台的切换和加载,增长一个管理类StageManager。函数
玩家输入和部分输出由UI控制。UI是个比较大的系统,难以用一两个类抽象,暂时先放到一边。线程
再加上网络消息管理NetManager,模块间事件通信EventManager,以及程序启动和配置类Application,就基本能够知足游戏逻辑开发的所有须要。这些类能够屏蔽掉图形、线程和网络细节。剩下的数据库/存取盘相对要复杂一些,能够有相似Saver这样的类提供读写操做,可是具体读写哪些内容可能还须要逻辑层写至关数量的代码,没有想到比较好的通用方案。设计
这些类及其提供的接口,就是逻辑开发须要打交道的所有东西了。够不够呢?是否任何游戏类型的任何游戏逻辑,均可以用,而且只用这些类相关的词汇来描述?就个人经验来说,应该能够知足绝大部分的需求了。对象
若是再进一步的话,道具,任务这种并不是全部,可是不少游戏都会用到的系统,是否是能够通用化?这个已经超出了简单框架的范围,留着之后考虑。接口