2013-02-19 42 views
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

回答

8

Ayyyy主要的學習體驗!

new Thread(new Shoot()).run(); // ***** !!!! 

你不通過調用其run()方法啓動一個線程,因爲所有所做的就是調用在相同線程中調用的代碼。你可以通過調用其start()方法開始主題。

+0

嗯。那麼,這將是一個問題......那麼'run()'做了什麼? – PulsePanda 2013-02-19 03:38:45

+0

@wbAnon:所有'run()'都是在調用代碼的同一線程上調用'run()'方法,而不是在後臺線程中調用。這是線程101類型的東西。 – 2013-02-19 03:39:31

+0

@wbAnon'run'由線程在通過'start'啓動後執行。目的是讓您重寫此方法以向線程提供功能。 – MadProgrammer 2013-02-19 03:39:52