2012-03-29 12 views
5

Ich arbeite an einem Spiel, wo mehrere Spieler gleichzeitig spielen können. Es ist ein 2D Spiel, und alle Charaktere sollten in der Lage sein, sich auf dem Bildschirm zu sehen. Wie das Spiel ist jetzt alle Geräte nur posten und holen Sie sich gegenseitig coordinates auf einen Server. Dies geschieht, indem Sie auf dem Gewinde getan:Multiplayer-Spiel Programmierung

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(); 
} 

Wie auch immer, würde ich die Charaktere gerne mehr reibungslos bewegen, da es ein wenig "laggy" es zu tun sein kann wie this.Does jemand eine Idee, wie ich dieses Ziel erreichen können, ?

Vielleicht sollte ich einen Typ von Koordinatenstapel haben, der nur ständig die Koordinaten an ihn drückt und dann die Werte aufstößt, während das Spiel läuft?

Jede Hilfe wird sehr geschätzt.

Grüße!

Antwort

2

Sehen Sie sich lineare Interpolations-/Extrapolationsmethoden an, um die Bewegung zu glätten. http://en.wikipedia.org/wiki/Linear_interpolation

hier sind einige Ressourcen, wie http://www.nr.com/

Viel Glück viele der numerischen Algorithmen in der Praxis umzusetzen!

+0

Danke, sieht aus wie eine lineare Interpolation kann helfen. Found ein Beispiel dafür http://www.racer.nl/tech/multiplayer.html – Araw

+0

Es tut Wunder, Sie werden erstaunt sein :) –

+0

Wie klingt diese Idee: Ich verwende lineare Interpolation und bestimmen, wie viele Frames sollte es für jeden Zeitpunkt der Bildschirm aktualisiert werden. Wenn also (ich konzentriere mich nur auf die X-Koordinate für dieses Beispiel) die vorherige Koordinate war 40 (die Stelle, die der Charakter jetzt auf dem Bildschirm hat), die aktuelle ist 60 (wo das Zeichen sollte sich bewegen), und die FrameUpdate Intervall ist 5 Koordinaten für jedes Update. Das bedeutet, dass ich 4 (4 * 5) Updates bekomme, bevor der Charakter 60 erreicht hat. Also werde ich diese Moves nur zu einer Eventliste für den gegebenen Charakter hinzufügen und der "laggy" -Teil wird praktisch weg sein :) – Araw