2012-03-29 38 views
5

Estoy trabajando en un juego donde varios jugadores deberían poder jugar a la vez. Es un juego 2D, y todos los personajes deberían poder verse en la pantalla. Al igual que el juego, ahora todos los dispositivos solo publican y traen los demás coordinates a un servidor. Esto se hace mediante la ejecución de subprocesos:Programación de juegos multijugador

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

De todos modos, me gustaría que los personajes a desplazarse con más facilidad, ya que puede ser un poco "laggy" hacerlo así this.Does Alguien tiene una idea sobre cómo puedo conseguir este objetivo ?

Tal vez debería tener un tipo de pila de coordenadas que simplemente recibe las coordenadas insertadas todo el tiempo y luego muestra los valores a medida que se ejecuta el juego?

Cualquier ayuda será muy apreciada.

¡Saludos!

Respuesta

2

Revisa los métodos de interpolación/extrapolación lineal para ayudar a suavizar el movimiento. http://en.wikipedia.org/wiki/Linear_interpolation

aquí están algunos recursos sobre cómo poner en práctica muchos de los algoritmos numéricos en la práctica http://www.nr.com/

Buena suerte!

+0

Gracias, parece que la interpolación lineal puede ayudar. Encontré un ejemplo en ese http://www.racer.nl/tech/multiplayer.html – Araw

+0

Hace maravillas, te sorprenderá :) –

+0

Cómo suena esta idea: Estoy usando interpolación lineal y determino cuántos marcos debe moverse cada vez que se actualiza la pantalla. Por lo tanto, si (me centraré solo en la coordenada X para este ejemplo), la coordenada previa fue 40 (la ubicación que el personaje tiene en la pantalla ahora), la actual es 60 (donde el personaje debería moverse), y el frameupdate interval es 5 coordenadas para cada actualización. Esto significa que recibiré 4 (4 * 5) actualizaciones antes de que el personaje llegue a 60. Así que solo agregaré estos movimientos a una lista de eventos para el personaje dado y la parte "lenta" desaparecerá virtualmente :) – Araw

Cuestiones relacionadas