我正在编写一个Snake游戏
蛇的运动的逻辑决定了如果我有一个Javascript数组
var links = [elem_0, elem_1, ..., elem_n];
表示蛇的链接的元素,然后蛇移动的方式是弹出elem_n
,将其位置更改为elem_0
加上翻译单位{{1}的位置}和dx
,然后将它放在数组的开头:
dy
---> [elem_0, elem_1, ..., elem_n]
(在此过程中更改了[elem_n, elem_0, ..., elem_(n-1)]
的某些内部属性)
这样做的方法是什么,在
之间不做任何妥协????
答案 0 :(得分:9)
操作和内存使用次数最佳效率
你要求两个通常相互对立的优化。例如更快的速度==更多的记忆。
那就是说,我可能会选择a (doubly) linked list来存储我的蛇,因为前面或尾部的移除或添加都非常便宜,而且对于游戏来说,更快就更容易记忆(在合理范围内,但是我想知道你的蛇在遇到记忆问题之前需要多长时间......远远超出可玩的......以及一些。)
当然,我假设您已经测量并发现基于标准阵列的方法太慢(似乎不太可能)。
答案 1 :(得分:3)
您可以通过两种方式旋转数组:
links.unshift(links.pop()); or
links.push(links.shift());
第一种方法可以解决您的问题。
答案 2 :(得分:2)
对于ES3转发的任何Javascript版本:
links.unshift(links.pop());