Problema con Collision()

Started by Milton884, March 11, 2011, 12:50:30 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Milton884

Que tal? bueno el tema es el siguiente. Hice un matamarcianos, y cuando quiero disparar, el disparo colisiona con el enemigo, varias veces... lo comprobe escribiendo la vida del marciano arriba del mismo, cuando colisiona se restan muchos puntos de vida, (cuando lo que programe es que al colisionar, reste 1 punto).

Estube leyendo los tutoriales de Trinit, decia que en una parte iba a hablar sobre eso, pero termine de leerlos y no encontre la solucion.

Drumpi

Eso es porque detecta la colisión CADA FRAME. Como el disparo tarda varios frames en dejar de "tocar" a la nave, en cada frame detecta la colisión y reduce su vida.
Tienes varias soluciones, pero yo te comento tres:
-Haz que al colisionar la primera vez, el disparo pierda energía, usando una variable local. Puedes hacer que al llegar a cero, el propio disparo se autodestruya (aprovecha para añadir una animación de explosión).
-Directamente, elimina al disparo con un signal.
-Collision devuelve un valor: el ID del disparo. Guárdalo y cuando vuelva a colisionar, comprueba que no sea el mismo disparo (esto no funciona si existe la posibilidad de que la nave toque a dos disparos a la vez.

Yo también escribí un tutorial con el mismo juego, pero está basado en DIV y Fenix. Puedes usar el código de Fenix, es compatible. Si te ves en un aprieto, te lo puedo pasar.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

DCelso

jejeje, creaste un disparo laser o percutor que atraviesa a los enemigos y continúa su trayectoria :D.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Milton884

Quote from: Drumpi on March 11, 2011, 04:30:15 AM
Eso es porque detecta la colisión CADA FRAME. Como el disparo tarda varios frames en dejar de "tocar" a la nave, en cada frame detecta la colisión y reduce su vida.
Tienes varias soluciones, pero yo te comento tres:
-Haz que al colisionar la primera vez, el disparo pierda energía, usando una variable local. Puedes hacer que al llegar a cero, el propio disparo se autodestruya (aprovecha para añadir una animación de explosión).
-Directamente, elimina al disparo con un signal.
-Collision devuelve un valor: el ID del disparo. Guárdalo y cuando vuelva a colisionar, comprueba que no sea el mismo disparo (esto no funciona si existe la posibilidad de que la nave toque a dos disparos a la vez.

Yo también escribí un tutorial con el mismo juego, pero está basado en DIV y Fenix. Puedes usar el código de Fenix, es compatible. Si te ves en un aprieto, te lo puedo pasar.

Gracias por tu ayuda. Ya pude solucionarlo. Te hago una pregunta, donde puedo bajar tus tutoriales de DIV Fenix.?

Drumpi

Te iba a remitir a la Wiki de gp32spain, pero la wiki no aparece, así que te lo puedes descargar desde mi web: drumpi.esp.st, es el último de la sección de tutoriales.

Pero de todas formas, te recomiendo que busques el tutorial de Osk o los tutoriales de windgate, que son mucho más completos y orientados a bennu. Deberían esta accesibles desde la página principal de la web de bennu.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)