Data structures 可从任何地方读取的类似队列的数据结构

Data structures 可从任何地方读取的类似队列的数据结构,data-structures,game-maker,Data Structures,Game Maker,我在Yoyo game Maker开发一款游戏,游戏中的物品沿着传送带移动。由于项目只朝一个方向移动,我认为使用队列或类似队列的数据结构来存储项目是最有意义的。然而,为了能够呈现项目,我需要能够在队列中的任何点读取所有项目,而不仅仅是头部或尾部 [[a] [b] [c] [d]] | V a <- [[ ] [b] [c] [d]] <- e | V [[b

我在Yoyo game Maker开发一款游戏,游戏中的物品沿着传送带移动。由于项目只朝一个方向移动,我认为使用队列或类似队列的数据结构来存储项目是最有意义的。然而,为了能够呈现项目,我需要能够在队列中的任何点读取所有项目,而不仅仅是头部或尾部

     [[a] [b] [c] [d]]
             |
             V

a <- [[ ] [b] [c] [d]] <- e
             |
             V

     [[b] [c] [d] [e]]
       |   |   |   |
       V   V   V   V

       b   c   d   e
[[a][b][c][d]]
|
v

a我在game maker中制作了一个具有类似要求的游戏。如果你知道青蛙游戏,它有一些树林漂浮在河上

移动:为此,我创建了一些沿特定方向移动的木材对象。当青蛙与它们中的任何一只相撞时,他/她开始朝那个方向漂浮。另外,如果它从窗户的一个方向出去,我会把它放回窗户的另一边

拾取:我认为要拾取其中一个项目,需要定义每个对象内部的碰撞。冲突发生后,您可以定义下一步。

使用数组可能“看起来”效率低下,但很可能不会。考虑到在任何时候传送带上实际有多少物品。如果您想快速随机访问数据结构中的任何索引,必须使用数组、DS列表或DS网格(在这里没有意义,很难)

使用DS列表,您可以使用
DS\u List\u delete(您的\u列表,0)
来“出列”,就像DS队列一样,并使用
DS\u List\u insert(您的\u列表,0,值)
来“入列”项目

遍历列表非常简单:

for ( var i = 0; i < ds_list_size( your_list ); i++ ) {
   var item = your_list[|i];
}
for(变量i=0;i
这可能还需要补充一点,在我正在开发的游戏中,对象是使用组件构建的,这基本上意味着所有敌人、玩家等在他们的Step事件中都有一个for循环,可以迭代并在需要时更新所有组件。在任何时候,我在游戏中最多有80个这样的对象,性能还不是问题


你应该首先尝试得到一个运行良好的解决方案,然后在特定于你游戏的条件下测试它:例如,如果你需要在结构中添加100个项目,那么就尝试一下,如果性能不令人满意,就进行优化。

@jbapple这将非常有效,谢谢。我正在寻找一个数据结构,不是基于对象的冲突实现。我正在使用的对象没有也不会有物理属性。我不清楚拾取过程是如何工作的,但如果您想从传送带拾取对象,这种方法会起作用。