1
我正在製作一個以上模式的2D殭屍射擊遊戲,我遇到了一些線程問題。這是交易。每當我按下空間時,我都會讓角色射出一顆子彈。問題是如果你佔有空間,它會拍攝一個,然後暫停,然後射擊很多子彈。有很多方法可以解決這個問題,但我想要這樣做,因爲它爲未來的拍攝速度留下了空間。這裏是導致問題的線程的代碼:當我啓動一個線程時,Java遊戲保持凍結狀態?
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();
}
}
}
}
所以這裏是dang問題。評論有點指出他們,但他們列出了病態。如果我刪除了明顯的事情,比如player.shoot();
或Thread.sleep(bulletShootSpeedMillis);
或在while循環的東西,甚至一個,沒有什麼變化。問題是,當我initiallize線程,與
else if (key == Integer.parseInt(commands[6])) {
shooting = true;
new Thread(new Shoot()).run();
}
整個遊戲只是凍結。什麼都沒有發生。當我用空間開始線程時,我的遊戲凍結了,我無法弄清楚爲什麼!以前的版本:
else if (key == Integer.parseInt(commands[6])) {
player.shoot();
}
它工作得很好。請幫忙!提前致謝! :)
編輯:感謝您的快速答覆。不用說,用簡單的錯誤,XD
嗯。那麼,這將是一個問題......那麼'run()'做了什麼? – PulsePanda 2013-02-19 03:38:45
@wbAnon:所有'run()'都是在調用代碼的同一線程上調用'run()'方法,而不是在後臺線程中調用。這是線程101類型的東西。 – 2013-02-19 03:39:31
@wbAnon'run'由線程在通過'start'啓動後執行。目的是讓您重寫此方法以向線程提供功能。 – MadProgrammer 2013-02-19 03:39:52