我有两个阵列,火球和贡巴斯(敌人)。当我创建fireball和gomba时,使用push()将它们添加到数组中;
我射火球,用福尔环移动贡巴斯。
for (var f:int = 0; f < fireballs.length; f++)
{
// move fireballs
}例如,如果火球走得太远,我也会移除火球。
if (myFireball.x + 1000 < player.x)
{
if (myFireball.parent)
{
myFireball.parent.removeChild(myFireball);
fireballs.splice(myFireball, 1);
}
}我没有问题移除火球,但如果火球hitTestObject贡巴,我想删除两个,火球和贡巴,蚂蚁,这是我的问题。
我试过这样做,我得到了错误,一个术语是未定义的,没有属性。
for (i = 0; i < fireballs.length; i++)
{
for (var m = 0; m < gombas.length; m++)
{
if (fireballs[i].hitTestObject(gombas[m]))
{
if (fireballs[i].parent)
{
fireballs[i].parent.removeChild(fireballs[i]);
// same for gombas
}
}
}
}如果我使用相同的循环,但只需检查火球和贡巴斯是否可见,如果火球击中贡巴斯,我设置为可见为假,它工作正常。为什么它不能与removeChild一起工作。
发布于 2013-09-18 21:29:49
正如@itcouldevenbeaboat所说,当循环遍历数组并移除对象时,最好向后循环;这样,就不会出现索引问题。
例如,使用数组["one","two","three"],如果您按如下方式循环并删除:
for( var i:int = 0; i < myArray.length; i++ )
myArray.splice( i, 1 );发生了什么,这是:
i从0开始,它指向"one"0位置的对象从myArray中删除myArray现在是["two","three"]i被递增,成为1。i是1,它指向"three"在本例中,我们跳过了"two"字符串,因为splice修改了我们正在迭代的数组。如果我们倒退:
for( var i:int = myArray.length - 1; i >= 0; i-- )
myArray.splice( i, 1 );然后我们得到这个:
i从2开始,它指向"three"2位置的对象从myArray中删除myArray现在是["one","two"]i将减少,并成为1。i是1,它指向"two"因此,我们从myArray中删除所有对象,没有问题。
对于特定的示例,当您从这两个数组中移除对象时,您应该向后迭代,这应该会给您提供如下内容:
outer: for ( var i:int = fireballs.length - 1; i >= 0; i-- )
{
for ( var m:int = gombas.length - 1; m >= 0; m-- )
{
if (fireballs[i].hitTestObject(gombas[m]))
{
// remove our fireball and gombas graphics
if( fireballs[i].parent != null )
fireballs[i].parent.removeChild( fireballs[i] );
if( gombas[m].parent != null )
gombas[m].parent.removeChild( gombas[i] );
// remove the fireball and gombas from the array; this is assuming
// that once a fireball hits a gomba, they both disappear
gombas.splice( m, 1 );
fireballs.splice( i, 1 );
// break to the outer loop; the fireballs one, as we don't need
// to go any further in the inner one
break outer;
}
}
}注意fireballs循环上的fireballs标签;一旦检测到fireball和gomba之间的冲突,就可以跳出。
如果您想让fireball命中多个gombas,那么就不要删除图形或拼接数组。
https://stackoverflow.com/questions/18878217
复制相似问题