我想创建一个蛇游戏,其中的蛇的运动不是基于网格但自由形式,我有麻烦找出如何获得尾部段跟着头。蛇游戏以下部分(非基于网格)
最简单的解决方案是从尾部循环到头部,并将当前位置设置为下一个段的位置,即:segment[i].position = segment[i - 1].position
。这工作很好,但我最终只有一个像素聚集在一起的所有部分(或如此)。这不是很有吸引力。
为了努力克服这一点,我创建了最后15个位置的数组,并将最新的位置推到最后。然后每一帧我弹出数组中的第一个元素并使用它,给出了该段在15帧前的位置的一个snapshot
。这种方式非常完美,但是通过不断调用new()
并对数组进行混洗,表现真的很糟糕。闪存垃圾收集器给了我地狱。
任何人都可以想到其他解决方案?
我正在研究Flash,但我不认为解决方案真的基于任何语言。
谢谢!
我认为他只需要一个队列而不是一个双向队列,因为他只需要添加到一端并从另一端删除。环形缓冲区的实现听起来像是如果“将数组混在一起”真的是瓶颈的话。 – 2010-12-05 05:04:30
@Laurence:我发现deque的实现往往比队列实现更优化,因为后者的很多依赖于数组混排。 – 2010-12-05 05:07:40