"Control de tiempo" en un 2D Plataformas

9

Estoy haciendo un juego de plataformas en 2D donde el jugador puede presionar un botón y reiniciar el nivel, solo su personaje anterior también correrá el nivel al mismo tiempo, como si estuvieran viajando en el tiempo.

Sé que otros juegos han hecho esto antes, y la forma en que pensé hacerlo es hacer que el personaje del juego tenga un conjunto de acciones (Inactivo, Saltar, Caminar a la izquierda, etc.) y luego detectar cambios en esas acciones e iniciar sesión una lista junto con el tiempo del juego. Entonces, cuando necesito que el personaje vuelva a ejecutar el nivel por sí solo, puedo pasar por la lista cambiando sus acciones en el momento adecuado.

¿Es esta la mejor manera de hacerlo? ¿Alguien tiene alguna experiencia en esto?

Gracias.

Woody Zantzinger
fuente
Lo que está buscando es más una 'Repetición' que un control de tiempo. Es posible que encuentre algunos buenos artículos sobre formas de lidiar con esto, pero todavía digo que la respuesta a continuación también es un buen comienzo en esta área. Ten en cuenta que las cosas que son 'aleatorias' en el juego arruinarán las repeticiones del personaje 'fantasma' que lo ejecuta nuevamente si pueden afectar el progreso.
James
3
Buen punto sobre las partes "aleatorias". Asegúrese de usar un generador aleatorio que genere sus números basados ​​en una semilla. Luego guarda la semilla con tu repetición y usa la misma semilla cuando juegues esa repetición.
bummzack
¿Como hiciste esto? ¿Cuál es su solución alternativa?

Respuestas:

8

EDITAR:

Consulte la respuesta de @ Bluescrn a esta pregunta; él desarrolla las debilidades en la reproducción de controles en lugar de vectores de movimiento o posición.

-

Estás en el camino correcto. Aquí está el enfoque que usaría:

Controladores

Crea una clase de controlador que reciba la entrada del teclado y la pase a tu personaje. Sin embargo, también tenga un registro del Controlador exactamente cuando se presionaron las teclas significativas (por ejemplo, flechas, salto, etc.) y cuando se soltaron. Almacenaría este tipo de información:

actions[0].milliseconds = 400     actions[0].action = right pressed
actions[1].milliseconds = 1000    actions[1].action = jump pressed
actions[2].milliseconds = 1300    actions[2].action = jump released
actions[3].milliseconds = 2500    actions[3].action = jump pressed
actions[4].milliseconds = 3000    actions[4].action = jump released
actions[5].milliseconds = 5330    actions[5].action = right released

Un controlador tiene dos modos:

  1. Grabar: recibe la entrada del teclado. Registros de entrada en la lista. Da la entrada de caracteres según el estado del teclado.
  2. Reproducción: Ignora la entrada del teclado. Avanza a través de la lista según los milisegundos transcurridos desde que comenzó el nivel. Da la entrada de caracteres según el estado del teclado grabado en el momento actual.

Caracteres

Cuando se construye su objeto Character, crea un nuevo Controller para sí mismo. El personaje puede estar en uno de dos modos en cualquier momento:

  1. Activo: solo hay un personaje activo y es el que controlas. Cuando el personaje está en modo activo, su controlador está en modo de grabación. Por defecto, cuando se construye un personaje, está en modo activo.
  2. Fantasma: este es el que reproduce tus acciones pasadas. Cuando un personaje entra en modo Fantasma, cambia su apariencia y establece su Controlador en modo Reproducción.

Niveles

Un nivel recién comenzado

Cuando comiences el nivel, crea un solo personaje. Ahora comienza el nivel y el jugador hace lo suyo.

Cuando el tiempo se restablece

Cuando el nivel se restablece, haz tres cosas:

  1. Dile al personaje activo actual que entre en modo fantasma.
  2. Crea un nuevo personaje.
  3. Llama a todos los personajes para que se reinicien. Esto los colocará de nuevo en la posición inicial sin movimiento, etc. A su vez, les indicarán a sus Controladores que se reinicien a milisegundos 0 sin presionar las teclas.

Entonces comienza el nivel y el jugador hace lo suyo.

doppelgreener
fuente
Esto está perfectamente claro. Muchas gracias. Tenía la idea correcta, pero iba a hacer un sistema central para registrar el movimiento, pero hacer que cada personaje registre su propio movimiento es una forma mucho más fácil de hacerlo. Gracias.
Woody Zantzinger
8

Si está reproduciendo entradas grabadas, considere las implicaciones de cualquier objeto en movimiento / destructible / interactivo en el mundo, que puede haberse movido o cambiado de estado cuando se repiten las acciones.

Además, reproducir entradas no funcionará con precisión si su juego utiliza un paso de tiempo variable. ¿Es posible que desee considerar una actualización del juego de paso fijo (con interpolación para la representación de velocidad de fotogramas variable)?

bluescrn
fuente
1
+10 si pudiera. Grandes consideraciones La reproducción de los vectores de movimiento o la posición sería superior a la reproducción de la entrada, dependiendo del efecto deseado. Decenas de milisegundos de inexactitud entre cuadros es probablemente más fácil de tener en cuenta cuando se trabaja con movimiento y posición que con entrada.
doppelgreener
4

Hay muchos temas que cubren los sistemas de grabación / reproducción de juegos / etc. que probablemente deberían ser la piedra angular de sus pasadas pasadas.

Aquí hay uno: Cómo diseñar un sistema de repetición

Tétrada
fuente
0

Grabar la entrada del teclado podría no ser tan útil en su caso. Sin embargo, puede generar una spline con una línea de tiempo. Incluso puede retroceder el tiempo si es complicado con las fuerzas que necesita aplicar

adrix89
fuente