0

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

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

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

4

2 回答 2

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

然后他根本不会被渲染。

于 2013-04-30T13:22:28.080 回答
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
}

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

于 2013-04-30T13:23:04.287 回答