0

嗨,我有雪碧,它是 granade ^^

问题是它何时爆炸。它应该杀死远处的所有目标(在这种情况下都在屏幕上),但它会随机杀死它们。

public void Explode(Object sender)
{
    ArrayList<Enemy> targetsToBlow = new ArrayList<Enemy>();
    targetsToBlow.addAll(targets);
    Bullet bullet = (Bullet)sender;
    float x = bullet.getPosition().x;
    float y = bullet.getPosition().y;
//  Log.i("Explode", "boom");
//  Log.i("Target",String.valueOf(y));
    for (int i=0;i<targetsToBlow.size();i++) 
    {
        Enemy enemy = targetsToBlow.get(i);
        float xd = enemy.getPosition().x - x;
        float yd = enemy.getPosition().y - y;
        float distance = (float) Math.sqrt(xd*xd + yd*yd);
        Log.i("Distance", String.valueOf(distance));
        if(distance<20000/2)
        {
            enemy.setHp(bullet.dmg);
            Log.i("Explode", "boomed1");
        }
        else if(distance<=20000)
        {
            enemy.setHp(bullet.dmg/2);
            Log.i("Explode", "boomed2");
        }
        if(enemy.getHp()<=0)
        {               
            targets.remove(enemy);
            removeChild(enemy, true);
            money++;
            moneyLabel.setString("GOLD: "+money);
        }
        targetsToBlow.remove(i);
    }
    projectiles.remove(bullet);
    removeChild(bullet, true);

}

我试图从最后一个索引中做到这一点,但是它没有杀死并且granade留在屏幕上。我不知道出了什么问题:/请帮忙

4

1 回答 1

0

问题出在删除它们后的数组列表项索引中。我认为这就是他们中的一些人留在现场的原因。

我做的和简单的拍摄一样:

public void Explode(Object sender)
{
    ArrayList<Enemy> targetsToDelete = new ArrayList<Enemy>();      

    Bullet bullet = (Bullet)sender;


         for (Enemy enemy : targets){
             if(isEnemyInRange(bullet, enemy, 100))
                {
                    enemy.setHp(bullet.dmg);
                    if(enemy.getHp()<=0)
                    {
                        targetsToDelete.add(enemy);
                    }
                }

            }
            for (Enemy target : targetsToDelete){
                targets.remove(target);
                removeChild(target, true);
            }

    projectiles.remove(bullet);
    removeChild(bullet, true);

}

所以项目索引没有改变,在第一个循环之后我可以销毁并删除我需要的所有项目:)

于 2013-03-26T18:36:49.353 回答