我试图在敌人被子弹击中后摧毁它的动画…我现在设置它的方式是,如果子弹动画击中了敌舰上的任何位置,就给该动画一个新的空动画,然后在屏幕上绘制空动画。问题是,现在每次飞船被击中,游戏就会崩溃……下面的代码来自我的更新方法。我做错了什么?谁能帮帮我?
//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
}
但是如果它不在同一个类中,尽量不要静态引用布尔值