目前,游戏架构全部做完了,现在就是堆内容了。
跟你说的很类似,抽象了 一个 Game逻辑,和 塔 ,怪 和攻击方式 三个类, 通过组合 塔+攻击方式 /或者 怪+攻击方式 或者道具+攻击方式 组合出不同的逻辑状态 , 逻辑状态与 场景现存 元素进行交互, 逻辑大概就是这样。 UI 这一块,全部做成分布式的, 怪物创造,怪物移动,怪物攻击,怪物死亡,塔创造,塔攻击。。。等等
其中通过传参形式,传入绑定的精灵,位置信息,行动目标,然后根据调用的API 去进行game逻辑反馈,中间不可避免的在UI里面有一个或多个BOOL值 ,反馈逻辑类,UI执行情况, 是否出现错误,需要重新生成,或者执行完毕等状态,反馈逻辑值。 因为逻辑类脱离了UI,前期代码时,发现数据跟UI完全不同步,然后不得不在UI里面触发逻辑反馈值,这个地方很难完全剥离。 通信方式,试过单例,不太好用,重新生成关卡清理数据 和 同步 不太好。用过单例,要在一个单例里面,调来调去的,也不舒服。 在父层 里面做,跟单例差不多,也很不舒服 ,找到 eventDispatch,很好用,但是发现,其实对主循环的开销很大, 这个玩意最后全部塞到了 Director的循环里面了。所以又改进了一下,做了一个 事件状态机, 就是传过去事件后,UI只管响应、不响应和无法响应 。 响应的是什么,在UI里面判断。就是只用了一个listener ,减少开销。
OK,我最后有去看了下MVC,发现了,在COCOS里实现 MVC是非常容易的,因为人家已经帮你把View解决了大部分, 通信机制也帮你预制了, 数据与逻辑 就剩下是自己的事了。感觉写的过程还是很爽的。 目前准备干的是,不用cocos的消息,开个线程,在线程里面处理消息的传递过程。 实践过程中,发现大量的内存碎片化问题,感觉不太好解决,目前没有好方法,UI层用cocos的retain release还行,逻辑层 完全不继承ref ,无法享用这个东西了,可能方法是用 malloc 2片内存,再动态的检测,互相倒换内存空间,应该可以解决,不过检测追踪的点,有点拿不准位置,要研究研究。