游戏框架再思考
本人在游戏的时候,是按照类型划分去规划对象设计的。但是最近的一个项目碰到了需要按照实例去划分的情况。拿卡牌游戏来做比喻的话,就是一个是分成了武将卡、装备卡、阵型卡等等,另一种思路是直接分成张飞卡、关羽卡、刘备卡……
这样的思路不同照成的做法上的不同超过了我的预料。类型划分思路会把卡看成一个控件,和按钮、图片之类的控件一样,控件只提供功能,不实现逻辑,提供的接口类似于setImage、setLevel这样的函数。而按照实例去划分的思路则是把卡当成一个完整对象来看,就是标准的面向对象编程课上教的那样,提供接口的时候是这样的:onCreate、onSelect……
按照类型划分的思路会把逻辑集中到一个逻辑层当中去,控件内部只保留显示逻辑,比如逻辑层指定控件 武将卡 显示一个爆炸效果,逻辑层只调用cardBoom这个函数,而爆炸要显示那张图片,显示在卡的头上还是脚边就是 武将卡 的内部逻辑了。再比如,当 武将卡 被打死后,应该向逻辑层通报自己已经死亡,由逻辑层调用 武将卡 的remove函数。而按照对象划分的思路就会认为这些都是内部逻辑,直接一个onAttack接口就搞定了。
在类内部复杂性的问题上,按照类型划分的思路会提供多层基类,先提供一个只用于显示的基类、然后继承后再提供一个可以跑、跳的功能再封装一个基类。而按照对象划分的思路因为每个类要考虑的情况是有限的,比如张飞卡只会冲撞,关羽卡只会砍人,那么复杂度就不会太高。