Karoshi MSX Community

Desarrollo MSX => Desarrollo (Español/Spanish) => Mensaje iniciado por: samsaga2 en 18 de Enero de 2012, 11:33:59 am



Título: Implementado movimiento de balas
Publicado por: samsaga2 en 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.


Título: Re: Implementado movimiento de balas
Publicado por: pitpan en 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.


Título: Re: Implementado movimiento de balas
Publicado por: nanochess en 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 ;)
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.


Título: Re: Implementado movimiento de balas
Publicado por: Iggy Rock en 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.


Título: Re: Implementado movimiento de balas
Publicado por: samsaga2 en 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.