Java 在被击中后摧毁敌人的动画

Java 在被击中后摧毁敌人的动画,java,animation,lwjgl,slick2d,game-development,Java,Animation,Lwjgl,Slick2d,Game Development,我正试图摧毁一个被子弹击中的敌人的动画。。。我现在设置的方式是, 如果子弹动画击中敌舰上的任何位置,则给该动画一个新的空动画,然后在屏幕上绘制空动画。问题是现在每次飞船被击中游戏就会崩溃。。。下面的代码来自我的更新方法。我做错了什么?谁能帮帮我吗 //ENEMYSHIP DESTRUCTION if((shootPosX>enemy1PosX -25 && shootPosX <enemy1PosX + 25)&

我正试图摧毁一个被子弹击中的敌人的动画。。。我现在设置的方式是, 如果子弹动画击中敌舰上的任何位置,则给该动画一个新的空动画,然后在屏幕上绘制空动画。问题是现在每次飞船被击中游戏就会崩溃。。。下面的代码来自我的更新方法。我做错了什么?谁能帮帮我吗

            //ENEMYSHIP DESTRUCTION 
            if((shootPosX>enemy1PosX -25 && shootPosX <enemy1PosX + 25)&&  (shootPosY>enemy1PosY - 40 && shootPosY< enemy1PosY + 40)) {
            enemy1 = new Animation ();
            enemy1.draw();
        }
//敌人毁灭
if((shootPosX>enemy1PosX-25&&shootPosX-enemy1PosY-40&&shootPosY

如果您需要更多信息,请告诉我…

将更方便a)将动画保留在内存中(不要将其转换为新的空白动画),并且在其所有者死亡时不渲染它,以便以后某个时间(例如重新启动或类似的事情)您可以重复使用它或b)从用于动画的任何容器(列表、数组、贴图)中删除动画

我推荐第一个,沿着这个方向

public class Enemy {

public enum State {
    DEAD, ALIVE
}

private State state;

// ...
// stuff

public State getState() {
    return state;
}

public void setState(State state) {
    this.state = state;
}

}
逻辑/渲染

 if (enemy gets shot) {
 //You want him dead on one shot
 //If using intenger
  enemy.setState(State.DEAD)
}


//Stuff


//Rendering

for (Enemy e: somecontainerforenemy){
 if(e.getState()==State.DEAD){
  continue;
  e.draw()
}
}
选项b

if(enemy gets shot){
 enemycontainer.remove(enemy)
}

那么他就不会被渲染了。

如果它都在同一个类中,为什么不设置一个简单的布尔值来控制是否绘制船舶

//ENEMYSHIP DESTRUCTION 
        if((shootPosX>enemy1PosX -25 && shootPosX <enemy1PosX + 25)&&  (shootPosY>enemy1PosY - 40 && shootPosY< enemy1PosY + 40)) {
        shipDraw == false;
    }

但是如果它不在同一类中,试着不要静态地引用布尔值

我试过你说的,现在的问题是船离开了,但只有在子弹击中船的那一瞬间。。。然后我就来了back@iibinxx这可能是因为您的onDraw()方法正在通过其他方式重新绘制船舶,您需要捕获它并告诉它在shipDraw==false或shipDraw以某种方式再次被指定为true时不要绘制?你是怎么申报的?
if(shipDraw){
   //your code
 }

else{
 //dont draw the ship or do ship explosion animation then end
}