您的位置:首页 > 其它

动作卡牌游戏-系统设计-总体设计规划

2015-01-03 21:34 190 查看
一个软件项目的最高级别的抽象

初始化:

  init()

主循环:

while(1)

{

  逻辑更新

  图像更新

  //帧率

}

结束:

  destroy()

以上是最高层次的抽象,那么什么东西是逻辑,什么东西是图像。内存控制,帧率控制。这些都如何做到的呢。其实不难,随着分享的深入,其实我们才会慢慢的涉及到这些底层的问题。

很显然,在这个死循环中,执行的代码量越少,效率越高。这是一个基本的道理。

我们姑且把一款游戏的代码分成2部分,一部分在主循环内部,一部分在主循环外部。然后我们尽量在主循环内部放入简单高效的代码。

那么在主循环内部执行的代码,我们再分两部分,一部分长驻主循环内部,这部分代码一定要简单,高效。另一部分代码是根据需求,由外部模块动态的向主循环内部插入一些功能或者函数。

----------------------------------------------------------------------------------黄金分割线 以上是指导思想 哈哈--------------------------------------------------------------------------------------------------------------------------------------

先看下我们游戏的系统: 由于代码是从0开始设计,并未做更深入合理的划分,就是就目前状态而言

//增加外部逻辑 pDirector->setOutLogicForceUpdate(Out_Logic_Force_Update); (强制更新,每一帧都调用,即时cocos引擎暂停)

        pDirector->setOutLogicUpdate(Out_Logic_Update);(如果cocos引擎暂停,这里就不会调用)

  这部分,就是想引擎的主循环当中,插入了两个回调函数的指针。这是对cocos引擎本身扩展,以便于项目能够轻轻松松的想主循环中插入代码,

//垃圾回收系统初始化 CRecycleMgr::GetInst()->init();

  这部分是垃圾回收系统,用于动态的回收一些纹理,临时数据结构,包含系统在一段时间内没有使用过的资源。它的update()写到了强制更新中,并给予设置帧率的功能,例如,可以使其在5帧调用一次,以后慢慢讨论这一块。

//时间控制系统 CTimeCtrl::GetInst()->init();

  这部分就是在最上层来改变cocos引擎执行的时间片源,可以实现某一个动作突然变慢的功能。

//定时器系统 CTimerMgr::GetInst()->init();

  这部分是定时器控制,和垃圾回收功能相似,比如每隔多少秒触发一次动画。

  

//屏幕适配 CScreenHelper::getInst()->init();

  这部分就是来做UI层的屏幕适配,场景也有场景的适配方案。

//解表系统初始化 ClientConfigMgr::GetInst()->LoadGameConfig();

  这部分是解析本地配表,客户端用到的很多配表。

//脚本系统初始化 CLuaManager::getInst()->init();

  这部分是加载脚本部分。

//回调系统初始化 CCallBackMgr::GetInst()->init();

  这部分主要是UI的回调部分,属于我们UI设计一大组成部分,需要慢慢详细去说。

//技能系统初始化 CSkillMgr::GetInst()->init();

  这是技能系统。

//GUI系统初始化 CGuiMgr::GetInst()->init();

  GUI系统

//特效系统初始化 CEffectMgr::GetInst()->init();

  特效系统

//动画系统初始化 CSkeMgr::GetInst()->init();

  动画系统

//分系统初始化 CSubSysMgr::GetInst()->init();

  业务逻辑系统,与逻辑分系统

//声音系统初始化 CSoundMgr::GetInst()->init();

  声音系统

//场景初始化 CSceneMgr::GetInst()->init();

  场景系统

以上各个分系统都会慢慢的做分享。其实我们的整个系统设计,就像一棵大树,每个树枝都会散开下去,细化到树叶。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: