0

こんにちは私はグラネードであるスプライトを持っています^^

問題はそれが爆発するときです。距離内のすべてのターゲット(この場合は画面上のすべて)を殺す必要がありますが、ランダムに殺します。

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);

}

私は最後のインデックスからそれをやろうとしましたが、それは殺さず、グラネードは画面に残ります。何が悪いのかわかりません:/助けてください

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 に答える