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 に答える