2012-03-29 103 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