我试图在被子弹击中之后摧毁敌人的动画......我现在设置它的方式是, 如果子弹动画击中敌舰上的任何位置,请为该动画添加一个新的空动画,然后在屏幕上绘制空动画。问题是,现在每次船撞到游戏时都会崩溃......下面的代码来自我的更新方法。我究竟做错了什么?有人可以帮帮我吗
//ENEMYSHIP DESTRUCTION
if((shootPosX>enemy1PosX -25 && shootPosX <enemy1PosX + 25)&& (shootPosY>enemy1PosY - 40 && shootPosY< enemy1PosY + 40)) {
enemy1 = new Animation ();
enemy1.draw();
}
如果您需要更多信息,请告诉我......
答案 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
}
但如果它不在同一个类中,请尽量不要静态引用布尔值