我正在制作一个游戏,我的角色会传递一个物体,当这样做时,分数会增加一个。该对象是数组的一部分,当我传递第一个对象时,分数会连续计数。以下是我到目前为止的情况:
if (beardman.x >= tubes[i].x)
{
score++;
}
我如何重新编写它以使分数只增加一个?
答案 0 :(得分:0)
你可以做的是拥有一个类似的数组,然后从列表中删除:
//assume you have a copy of the tubes array called activeTubes.
if (beardman.x >= activeTubes[i].x)
{
score++;
activeTubes.splice( i, 1 );
}
编辑:我想补充一点,拼接已知是一个相当昂贵的操作,因为它改变了索引存储在内存中的方式。话虽这么说,如果你正在搜索一个相当大的列表,那么优化将如下所示:
//assume you have a copy of the tubes array called activeTubes.
if (activeTubes[i] && beardman.x >= activeTubes[i].x)
{
score++;
activeTubes[i] = null;
}
甚至从for循环的角度来看:
var i:int;
for ( ; i < activeTubes.length; i++ ) {
//check if the index is null, if so continue.
if ( !activeTubes[i] ) { continue; }
if (beardman.x >= activeTubes[i].x)
{
score++;
activeTubes[i] = null;
}
}