Cómo manejar las velocidades de fotogtwigs y sincronizar las pantallas de las pantallas

En primer lugar, le pido disculpas si el título está networkingactado incorrectamente.

De acuerdo, déjame dar el escenario

Estoy creando un juego de lucha de 2 jugadores, una batalla promedio includeá un map (mover / inmovilizar) y 2 personajes (que se representan al networkingibujar una cantidad variable de sprites uno tras otro).

Ahora, en este momento, tengo un único bucle de juego que me limita a un número determinado de fotogtwigs por segundo (usando Java):

Timer timer = new Timer(0, new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { long beginTime; //The time when the cycle begun long timeDiff; //The time it took for the cycle to execute int sleepTime; //ms to sleep (< 0 if we're behind) int fps = 1000 / 40; beginTime = System.nanoTime() / 1000000; //execute loop to update check collisions and draw gameLoop(); //Calculate how long did the cycle take timeDiff = System.nanoTime() / 1000000 - beginTime; //Calculate sleep time sleepTime = fps - (int) (timeDiff); if (sleepTime > 0) {//If sleepTime > 0 we're OK ((Timer)e.getSource()).setDelay(sleepTime); } } }); timer.start(); 

en gameLoop() personajes se dibujan en la pantalla (un personaje tiene una matriz de imágenes que consiste en sus sprites actuales) cada llamada gameLoop() cambiará los sprites actuales al siguiente y se repetirá si se llega al final.

Pero como se puede imaginar, si un sprite tiene solo 3 imágenes de longitud que llamar a gameLoop() 40 veces, el movimiento de los personajes se dibujará gameLoop() = 13 veces. Esto causa algunas anomalías menores en el espíritu de algunos charcters

Entonces mi pregunta es ¿cómo voy a entregar una cantidad determinada de fotogtwigs por segundo cuando tengo 2 caracteres en la pantalla con una cantidad variable de sprites?

Puede que no sea una respuesta directa a su pregunta, pero es mi consejo;)

No muevas tus sprites en function del número de cuadros, pero hazlo en function del time del reloj de panetworking. ¿Por qué? Bueno, es muy fácil para un juego tener una velocidad de fotogtwigs variable, así que imagina que tu personaje está saltando de plataforma en plataforma, y ​​la PC se queda atrás por alguna razón. Si su movimiento se basa en la velocidad de fotogtwigs, podría disminuir la velocidad en el salto medio y morir 🙁 Prepárese para ser asesinado por el jugador al día siguiente.

Entonces, la idea detrás de una lógica de juego basada en el time es que no importa la cantidad de FPS que el juego esté ejecutando actualmente, los resultados serán los mismos para el usuario, con la única variación de que la pantalla es "janky": P

Esta publicación ( ¡Link !!! ) puede ayudar a implementar una lógica de juego basada en el time o /

Espero que haya sido útil y lo siento si no fue la respuesta que buscas …

Editar: Hay una pregunta en este sitio Preguntas frecuentes con respecto a esto, muy interesante leer: ¿ Cuándo debería usar un paso de time fijo o variable?

Es posible que desee considerar el uso de una velocidad de fotogtwigs variable. De esta forma, puede limitar la velocidad de fotogtwigs a la velocidad de actualización del monitor sin cambiar la velocidad del juego.

AranHase tiene un punto válido acerca de los fallos resultantes de las velocidades de cuadro variables, pero puede evitar esto omitiendo el ciclo de actualización si el time entre el cuadro actual y el anterior es demasiado alto.

Está utilizando llamadas de suspensión para controlar su velocidad de fotogtwigs: esta es una idea MALA y debe get un timer adecuado como se menciona en las otras respuestas; Voy a elaborar algunos sobre el uso del sueño para esto.

El gran problema con Sleep es que en la mayoría de las plataforms solo garantiza un time mínimo para dormir: el time real que se pasa en un modo de suspensión puede ser más largo que eso. Esto es cierto incluso si usa Sleep con un timer de alta resolución.

Hay muchas preguntas y respuestas en este sitio relacionadas con esto; ver https://gamedev.stackexchange.com/search?q=sleep y ver especialmente http://www.altdevblogaday.com/2012/06/05/in-praise-of-idleness/ para una discusión más profunda en la maldad del sueño (entre otras cosas).

Entonces, lo principal a esperar si se usa Sleep es la abundancia de anomalías de framerate.

Para qué dormir es genial para networkingucir el uso de la CPU, y si ese objective es más importante para usted que una tasa de cuadros por segundo, entonces hágalo sin problemas, pero no sin antes considerar si tiene disponibles soluciones más adecuadas.