击中后摧毁敌人动画

时间:2013-04-30 13:13:14

标签: java animation lwjgl slick2d game-development

我试图在被子弹击中之后摧毁敌人的动画......我现在设置它的方式是, 如果子弹动画击中敌舰上的任何位置,请为该动画添加一个新的空动画,然后在屏幕上绘制空动画。问题是,现在每次船撞到游戏时都会崩溃......下面的代码来自我的更新方法。我究竟做错了什么?有人可以帮帮我吗

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

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

2 个答案:

答案 0 :(得分:0)

要么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)
}

然后他根本不会被渲染。

答案 1 :(得分:0)

如果全部属于同一类,为什么不设置一个简单的布尔值来控制是否应该绘制船?

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

然后在您的船舶Draw()方法中,

if(shipDraw){
   //your code
 }

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

但如果它不在同一个类中,请尽量不要静态引用布尔值