Pregunta

Estoy buscando información sobre cómo moverse (y anime) sprites en 2D a través de un mundo de juego isométrica, pero tienen su movimiento animado sin problemas como el desplazamiento de piso para piso, en lugar de tener que saltar desde los confines de una azulejo, a los confines de la siguiente.

Un ejemplo de esto sería en el Transport Tycoon juego, donde los trenes y los carros son a menudo medio en un azulejo y media en la otra.

¿Fue útil?

Solución

Dibujo los sprites en el lugar correcto, no es demasiado difícil. La fórmula de proyección son:

screen_x = sprite_x - sprite_y
screen_y = (sprite_x + sprite_y) / 2 + sprite_z

sprite_x y sprite_y se fijan los valores de punto (o coma flotante si lo desea). Por lo general, la precisión del punto fijo es el número de píxeles en un azulejo -. Así que si su gráfica baldosas era 32x16 (un cuadrado de 32x32 proyectada) que tendría 5 bits de precisión, es decir, 1 / 32th de una baldosa

La parte más difícil es para ordenar los sprites en un orden que se representa correctamente. Si utiliza OpenGL para dibujar, se puede utilizar una memoria intermedia z para hacer esto realmente fácil. El uso de GDI, DirectX, etc, es muy duro. Transport Tycoon no procesa correctamente los sprites en todos los casos. El Tycoon original de Transporte tenía el motor de renderizado más horrible que he visto nunca. Se implementa los tres niveles de zoom son tres instanciations de una macro masiva masm. TT fue escrito completamente en ensamblador. Lo sé, porque yo portado a Mac hace muchos años (y lo hice una versión fresca para el kit de desarrollo de PS1, así, necesitaba 6Mb sin embargo).

P.S. Uno de los gráficos pequeños bungalows en el juego se basaba en la casa de Chris Sawyer estaba viviendo en ese momento. Nos vimos tentados a añadir un Ferrari aparcado en el camino de entrada para la versión Mac, ya que era el coche que compró los derechos de autor.

Otros consejos

Busque la manera de hacer la interpolación lineal (que es una fórmula bastante simple). A continuación, puede usar esto para parametrizar la transición en un único intervalo [0, 1]. A continuación, sólo tiene un estado en sus sprites para almacenar los hechos:

  1. que se están moviendo
  2. puntos inicial y final
  3. de inicio y final (o la hora de inicio y duración

y luego cada cuadro se puede dibujar en la posición correcta mediante una interpolación desde el punto inicial hasta el punto final. Una vez que haya superado la duración, el sprite a continuación, se actualiza a ser que no se mueve y se coloca en el punto final / baldosas.

¿Por qué piensan que va a saltar de piso para piso? Puede posicionar tu sprite en cualquier x, y de coordenadas.

En primer lugar crear el búfer de pantalla de fondo y luego colocar los sprites en la parte superior de la misma.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top