探讨游戏架构设计

文章来源:http://www.tomseysdavies.com/2011/01/15/game-architecture/

译:By 童年

转载请注明出处:http://my.oschina.net/u/865151/blog

        在我所做的所有游戏中,我从来没有一次对使用框架有过愉快的经历。在日常工作中,使用PureMVC或者RobotLegs或多或少能够享受下一个设计良好的框架带来的益处。但是MVC的设计架构决定了它并不是很适合游戏开发。

        那该怎么办呢?也许你会像我一样设计出如下图一样的游戏架构:

                探讨游戏架构设计

        Ok.细节可能有所不同,相信游戏开发的人应该对这比较熟悉。在上图中,我们有着良好的继承关系树。(童年注:注意上图中Platform继承于Collideable,但不可移动,相对于左边的Movable)如果我们想把Platform改成不可移动呢?好的没问题,我们只需要将Platform继承于Movable就可以了。但如果有的Platform可以移动,有的不可以呢,我们只需要用一个开关Flag控制就可以了。

        那问题来了。或许我们需要一个不能移动的Enemy,最简单的解决办法是什么呢?那改变继承的办法就没那么管用了。如果任何事情都是事先规划好的,倒是没有问题,但是游戏中常常伴随着需求变更。上述的改动,涉及到以后代码重用的问题,还有如果我们想不经过编译,在运行时动态改变这些情况该怎么办?

        下面我用另一种方式,你可以根据游戏内的需要有选择的勾选这些属性。

        探讨游戏架构设计

        正如你看到的,我们很容易为Platform勾选Moveable,使得Platform具有Moveable属性。这是实践中理想状态。我们可以用一个“Entity System”或者叫做“Component Systems”、“Entity Component System”等。我准备用EntitySystem代替Component,因为在flash里面Component有自己的含义,很容易混淆。我创建了自己的框架Ember,并且将之开源。

转载于:https://my.oschina.net/game007/blog/92040