现在的位置: 首页 > 综合 > 正文

游戏核心算法编程内幕学习(三):设计模式

2014年05月29日 ⁄ 综合 ⁄ 共 883字 ⁄ 字号 评论关闭

1.单体模式:是个全局对象,整个应用程序中只有一个实例

2.策略模式:

为了避免过量的switch,为了使代码更优雅。分开类定义与一个或几个成员
算法,使这些算法可以在运行时交换。这样的话,士兵可以使用单个全局算法(recalc
 AI 调用),可以优雅的动态转换。
实时战略模式需要两个类,第一个是战略类,提供战略算法,这是个抽象类,在子类中
派生特定战略;第二个是情景类,定义采用战略的情景,其成员执行选择的战略并在需
要时变换战略。

3.工厂模式:集中处理对象的生成与删除,工厂嘛,生产和回收。代码集中在这里,
避免了“生成/删除代码分布在许多不同文件中,通常会因为协议不一致造成的问题。”

4.空间索引: 
   1.最简单也是最慢的:用普通链表做空间索引,每次都要扫描整个表。在数量不太多的时候
可以用。
   2.用规则栅格作为空间索引:将空间分成长度相同的桶,然后每个桶保存元素的链表。
可以在装入时确定桶的长度大小,桶越小性能越好,但内存要求高。
     用规则栅格作为空间索引在几何测试中效果很明显:只要找出扫描的位置(如玩家
位置),然后将这个三维位置变成单元坐标,扫描相应的表(可能是相邻桶)。在密集
情形中,可以比只用表快几个数量级。
   3.用四叉树/八叉树做空间索引:比栅格慢,因为要更彻底的遍历数据结构,但其
使用的内存少得多,某些情况下可以用。但记住,这样建立的四叉树不太适合动态几何体
。如果要存储运动对象,则可能改变所在的四叉树单元,而根据这种改变动态重建四叉树
是很难的!(删除离开节点合并新节点,在此期间可能还有重新分裂)

5.复合模式:做关卡很有用。许多应用程序要为不同目的保存异构数据结合。
         如游戏管卡里面:子关卡,敌人,药剂,宝物....
所有数据放在一个结构中使遍历更直观,特别是加上空间索引,可以进行如下查询:“
哪个部分在房间里?”

6.轻量级模式:
    在大多数对象基本相同只有几个参数不同时非常有用,如战略游戏里面的士兵,
基本上只有血量和位置+等级不同而已。这时不必在内存中堆满基本相同的对象,而是
高效利用系统资源,同时保持一致的访问界面。

书中还讲了其他几个。

抱歉!评论已关闭.