嗨我有精灵的精灵^^
问题在于它何时爆炸。它应该杀死距离上的所有目标(在这种情况下全部在屏幕上),但它会随机杀死它们。
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 :(得分: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);
}
所以项目索引没有改变,在第一次循环后我可以销毁并删除我需要的所有项目:)