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



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

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

这将是更方便的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;
    }

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

if(shipDraw){
   //your code
 }
else{
 //dont draw the ship or do ship explosion animation then end
}

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

相关内容

  • 没有找到相关文章