Cocos2d删除距离中的对象(java)

时间:2013-03-25 22:59:31

标签: object range cocos2d-android

嗨我有精灵的精灵^^

问题在于它何时爆炸。它应该杀死距离上的所有目标(在这种情况下全部在屏幕上),但它会随机杀死它们。

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停留在屏幕上。我不知道出了什么问题:/请帮忙

1 个答案:

答案 0 :(得分:0)

问题出在arraylist项目索引删除后。我认为这就是他们中的一些留在现场的原因。

我在简单的拍摄中做到了这一点:

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

}

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