0

これまでのところ、船を建造して敵のステーションを破壊しようとする小さなゲームがあります。複数の船がステーションで発砲している場合を除いて、すべて正常に機能します。何が起こっているように見えるか (または少なくとも私が信じていること) は、弾丸の位置を設定するためのコードが船の数だけ発生していることです。そこで単純に弾速を船の数で割ってみたのですが、結局弾丸が動かなくなってしまいました。修正を試みていないため、コードは次のとおりです。

for (int j = 0; j < 9999; j++) {
    if (PlayerMapData.weaponFireCreated [j]) {
        PlayerMapData.weaponFire [j].setLocation (
            (int) (PlayerMapData.weaponFire [j].x + playerMapData.weaponTravelSpeed * PlayerMapData.weaponFireDirectionX [j]),
            (int) (PlayerMapData.weaponFire [j].y + PlayerMapData.weaponTravelSpeed * PlayerMapData.weaponFireDirectionY [j])
        );

ヒット検出は以下で行われます。setLocation ステートメントが問題ですか、それともどの弾丸がどの船に属しているかを区別する必要がありますか?

編集:これがタイマーであることを指定する必要がありました。

4

2 に答える 2

0

問題は単純に、weaponFire 配列が 1 次元であり、複数の船によって参照されていたためです。2D 配列を使用することで問題が修正されました。これは、船が発射したすべての弾丸を動かそうとするのではなく、発射した弾丸の「所有権」が船にあるためです。

于 2015-03-03T02:27:02.057 に答える
0

一度だけ確認してください。

 if (PlayerMapData.weaponFireCreated [j] && !PlayerMapData.alreadyUpdated[j]) 
 { 
           ...
           PlayerMapData.alreadyUpdated[j]=true;
 }

船のインスタンスごとにマップ全体をスキャンしているわけではありませんよね?

于 2015-02-18T00:04:13.423 に答える