2013-03-25 3 views
0

Привет У меня есть спрайт, который Granade ^^Cocos2D удаление объектов в дистанционном (Java)

Проблема заключается в том, когда она взрывается. Он должен убивать все цели на расстоянии (в данном случае все на экране), но убивает их случайным образом.

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 остается на экране. Я не знаю, что не так:/Пожалуйста, помогите

ответ

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

} 

Так индекс товара не изменяется, и после первого цикла я могу уничтожить и удалить все элементы, которые мне нужно :)