2013-04-18 42 views
0

我在Java中製作遊戲,我想創建一個隨機移動的角色。我所做的是非常痙攣。我基本上想在生成的隨機數之間添加一個延遲。我是一個初學者,所以不要評判我的代碼笑如何減慢一種方法而不影響程序的其餘部分?

public class Monster extends Entity{ 

private World world; 

Image monster; 

public Monster(int x, int y, World world) { 
     super(x, y, world); 
     w = 32; 
     h = 32; 
     this.world = world; 
} 

public void render(GameContainer gc, Graphics g) throws SlickException{ 
     super.render(gc, g); 
     monster = new Image("gfx/world/monster.png"); 
     g.drawImage(monster, x, y); 
} 

public void update(GameContainer gc, int delta) throws SlickException{ 
    super.update(gc, delta); 
    Random move = new Random(); 
    int number; 

    for(int counter=1; counter<=1;counter++){ 
     number = move.nextInt(4); 
     System.out.println(number); 


     if(number == 0){ 
      setDy(-1); 
     }else if(number == 1){ 
      setDx(-1); 
     }else if(number == 2){ 
      setDy(5); 
     }else if(number == 3){ 
      setDx(5); 
     }else{ 
      setDx(0); 
      setDy(0); 

     } 
    } 
} 
} 
+0

什麼調用您的更新函數。它看起來像你想要放慢什麼,而不是更新本身 –

回答

0

嘗試添加

try { 
     Thread.sleep(ms); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 

其中ms - 多少毫秒,例如1000

+0

我應該把它放在哪裏? – user2292961

+0

無論你想要什麼,例如,在你的方法更新。請參閱上面的代碼更新。 – Alex

+0

有關此解決方案(在當前線程中插入睡眠)的問題是,當您可以計算其他材料/渲染時,所有程序都會休眠。 –

0

你會想要在單獨的線程中封裝NPC運動,並在該線程內調用thread.sleep來暫停運動。

這是關於how to define threads的一個很好的教程,而oracle docs顯示了一個睡眠線程的例子。

1

這是一種常用的遊戲技術,具有不同的更新和渲染速率。 你需要做的是(僞代碼示例):

1 - 初始化時間變量 - DateTime lastUpdate = new DateTime();

您在循環進入每次:

2 - 檢查是否在一定的時間已經過去了 - lastUpdate.hasPassed(X_TIME,新的DateTime());

3 - 如果時間已過(最後一行爲true)lastUpdate = new DateTime();

4 - 否則返回

相關問題