2012-03-29 97 views
5

我正在製作一個遊戲,其中多個玩家應該能夠一次玩。這是一款2D遊戲,所有角色都應該能夠在屏幕上看到彼此的移動。 就像遊戲現在所有的設備只是發佈和獲取對方coordinates到服務器。這是通過運行的線程完成:多人遊戲編程

public void StartCoordinatorFetcherThread(final Sprite Object) 
{ 
    Thread CoordinateStarter = new Thread() 
    { 
     public void run() 
     {   
      while(true) 
      { 
       Object.testing = Object.InternetObject.GetMessages(); 
       try { 
        Thread.sleep(20); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }; 
    CoordinateStarter.start(); 
} 

public void StartCoordinatorPosterThread(final Sprite Object) 
{ 
    Thread CoordinatePoster = new Thread() 
    { 
     public void run() 
     {   
      while(true) 
      { 
       Object.InternetObject.PostCoordinates(Object.x,Object.y); 
       try { 
        Thread.sleep(20); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }; 
    CoordinatePoster.start(); 
} 

無論如何,我想人物移動更加順暢,因爲它可以是一個有點"laggy"做它像this.Does人有一個想法我如何能實現這一目標?

也許我應該有一種類型的座標堆棧,它只是一直被推到座標上,然後在遊戲運行時彈出這些值。

任何幫助將不勝感激。

問候!

回答

2

檢查線性插值/外推方法以幫助平滑運動。 http://en.wikipedia.org/wiki/Linear_interpolation

下面是關於如何實現許多的數值算法在實踐中 http://www.nr.com/

運氣好一些資源!

+0

謝謝,看起來像線性插值可以幫忙。在http://www.racer.nl/tech/multiplayer.html上找到一個例子 – Araw 2012-03-29 10:44:43

+0

它確實有奇效,你會驚歎不已:) – 2012-03-29 19:02:56

+0

這個想法聽起來如何: 我正在使用線性插值並確定有多少每次屏幕更新時它應該移動的幀。因此,如果(我只關注這個例子中的X座標),先前的座標是40(角色現在在屏幕上的位置),當前是60(角色應該移動到的位置),而每次更新的frameupdate間隔爲5個座標。這意味着我將在角色達到60之前得到4(4 * 5)個更新。所以我只會將此移動添加到給定角色的事件列表中,而「laggy」部分將實際上消失:) – Araw 2012-03-29 20:11:37