Karoshi MSX Community
05 de Julio de 2021, 03:53:48 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: Implementado movimiento de balas  (Leído 2801 veces)
0 Usuarios y 1 Visitante están viendo este tema.
samsaga2
Karoshi Fan
**
Mensajes: 76


Email
« : 18 de Enero de 2012, 11:33:59 am »

A lo mejor alguien se ha encontrado con este problema antes y pueda orientarme.

Tengo que implementar balas en mi juego. He pensado en dos posibles soluciones:

- El algoritmo bresenham de toda la vida para dibujar lineas
- Utilizar un simple calculo de vectores m=(x2-x1)/(y2-y1) tirando de números enteros con fixed point (¿punto fijo en castellano?).

El primer método creo que sería más lento que el segundo. Sobretodo si la bala avanza más de un pixel de velocidad.

El segundo método no sé si 16bits (usando 8 bits para decimales) tiene suficiente precisión. Tal vez podría mirar de implementarlo usando 24bits para tener 16 de precisión pero afectaría a la velocidad.
En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #1 : 18 de Enero de 2012, 12:49:58 pm »

En principio, Bresenham es la opción más eficiente y rápida. Búscate una buena implementación para Z80 y, evidentemente, ajústala para tu caso. En su día Ramones me enseñó su versión, empleada en el Majikazo si no recuerdo mal, y funcionaba muy bien, pero como le tenemos de baja, no sé qué recomendarte.

Lo de usar punto fijo de 16 bits es una opción, pero no como lo indicas, sino basándote en ángulos. Es decir, en el momento cero, cuando "sale" la bala, calculas el ángulo que te interesa (dividiendo la circunferencia completa en una potencia de 2 para que la tabla funcione mejor). A partir de ahí, lees tu tabla trigonométrica generada, y en cada frame (o los que tú decidas) sumas el valor de punto fijo que te da la tabla. No es óptimo y es menos preciso, aunque es más rápido en ejecución una vez que hayas determinado la parte complicada: qué ángulo elegir.
En línea
nanochess
Karoshi Lover
***
Mensajes: 141


Programando algo buenísimo :)


WWW
« Respuesta #2 : 18 de Enero de 2012, 01:46:01 pm »

Bresenham es la opción más eficiente. Es como si dibujaras la línea, pero nunca compruebas el final, solo desaparece la bala cuando sale de la pantalla. Estoy usando esto en Mecha Eight Wink
La opción de ángulos es mala porque el calculo para encontrar el ángulo entre jugador y enemigo es demasiado pesado o requiere una tabla muy grande.
En línea

Mira mis juegos MSX/Colecovision/Atari/Intellivision http://nanochess.org/retro_es.html, y sígueme en Twitter http://twitter.com/nanochess
Iggy Rock
Visitante
« Respuesta #3 : 18 de Enero de 2012, 07:15:52 pm »

Depende también de las necesidades del juego. Si requieres precisión la primera opción es la mas acetada pero si quieres dar cierto margen al jugador o algo de "aletoriedad" a los disparos la segunda, que tiene el punto de mira algo desviado.
En línea
samsaga2
Karoshi Fan
**
Mensajes: 76


Email
« Respuesta #4 : 19 de Enero de 2012, 08:17:41 am »

Pues me habeis convencido, probaré con Bresenham. Iba a hacerlo con vectores pero prefiero precisión.
En línea
Páginas: [1]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!