数据结构(Data structures)


在游戏中,你经常需要精确且有序地存储信息。比如,你可能需要保存一个人携带的道具列表或存储一组需要访问的位置。你 可以 使用数组来达成这个目的,但如果你想做一些更复杂的操作, 比如排序或搜索某个特定道具, 你需要写一大堆GML代码,执行效率就会变低, 也更难进行debug,这写起来绝对痛苦!

为了解决这种问题, GameMaker Studio 2 内置了一些更为便利的 数据结构 函数. 目前有六种不同类型的数据结构可用,每一种都有其适用的场景,这取决于你想如何存储和操作你的数据,分别是:堆栈、队列、列表、映射、优先队列、以及栅格

本质上,所有的数据结构都以相同的方式在工作——你创建一个数据结构然后把它的 索引值存储到变量中然后,你可以使用这个索引值在其他函数中进行调用操作。最后,一旦你用完记得要销毁这个数据结构以将其从内存中移除。你可以根据需要同时使用尽可能多的数据结构,并且所有结构都可以存储字符串和实数值。

注意: 跟动态资源一样,数据结构会消耗内存,因此当不再使用它时应当销毁释放内存,以防止内存泄漏拖慢游戏运行效率甚至崩溃
重要!创建数据结构时,用于标识它的索引值是从0开始的整数值。这意味着不同的数据结构可能拥有相同的索引值, 因此在你不太确定数据结构是否存在时应该先用 ds_exists 函数来确认其存在然后再进行访问。另外,要注意一个被销毁的数据结构索引值有可能被赋给之后创建的新的数据结构,因此我们强烈建议你在销毁一个数据结构时,应该把对应存储这个数据索引值的变量值设为-1.


关于不同数据结构的具体信息可以在以下章节找到:

  1. 堆栈(Stacks)
  2. 队列(Queues)
  3. 列表(Lists)
  4. 映射表(Maps)
  5. 优先队列(Priority Queues)
  6. 栅格(Grids,也称网格)

在你实际使用数据结构之前,你还需要了解一点,在四舍五入的情况下有时候你得到的结果可能会与预期相悖。使用下列函数来修改数据精度可以解决该问题:

以下函数则用于检查某个数据结构是否存在

最后,你同样可以使用 数组来保存数据。你可以在下面这节中查看更多关于数组的内容:

  1. 数组