上記のモードの2Dゾンビシューターを作成していますが、スレッドに問題があります。これが取引です。スペースを押すたびにキャラクターに弾丸を発射させました。問題は、スペースを確保すると、1発発射してから一時停止してから、大量の弾丸を発射することでした。これを修正する方法はたくさんありましたが、撮影速度を将来変更する余地があるので、この方法が必要です。問題を引き起こしているスレッドのコードは次のとおりです。
package threads;
import Game.GameCore;
public class Shoot extends GameCore implements Runnable {
/**
* WHEN I START THIS THREAD, THE ENTIRE GAME FREEZES, AND I DO NOT KNOW
* WHY... NEED TO FIX. IT DOES NOT FIX THE PROBLEM TO TAKE OUT THE "SHOOT"
* OR THE "SLEEP"...
*/
public void run() {
while (shooting && gameRunning) { // shooting is made true when space is
// pressed, and set false when space
// is released. gameRunning is true
// if the game is running, which it
// is. removing either of these
// doesnt work either.
player.shoot(); // player comes from the GameCore class, and
// represents the player entity. if i remove this,
// nothing changes.
try {
Thread.sleep(bulletShootSpeedMillis); // bulletShootSpeedMillis
// is equal to 1000, but
// makes no difference
// to change
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
だからここにダンの問題があります。コメントはちょっとそれらを指摘しますが、それらをリストしません。whileループ内の、またはその1つなど、明らかなものを削除しても、何も変わりませplayer.shoot();
ん。Thread.sleep(bulletShootSpeedMillis);
問題は、スレッドを初期化するときに、
else if (key == Integer.parseInt(commands[6])) {
shooting = true;
new Thread(new Shoot()).run();
}
ゲーム全体がフリーズします。何も起こりません。スペースでスレッドを開始した瞬間、ゲームがフリーズし、理由がわかりません!!! 以前のバージョン:
else if (key == Integer.parseInt(commands[6])) {
player.shoot();
}
それはうまく機能します。助けてください!前もって感謝します!:)
編集:迅速な回答に感謝します。言うまでもなく、単純な間違いを伴う主要な学習経験XD