Reacción en cadena!

Started by Theby, June 23, 2011, 03:12:14 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Theby

Hola, estoy trabajando en un juego y me tope con este problema: En mi juego existen bombas que al explotar pueden destruir ciertos objetos en el escenario, sin embargo al tocar otra bomba esta debe explotar con cierto retardo, es decir si pongo una bomba tras otra al explotar la primera las demás deben ir explotando en orden (por ejemplo de izquierda a derecha). La explosión realizada por una bomba sucede cuando el proceso muere, es decir, todo el código relacionado a la explosión (rango, limites, condiciones, etc) se encuentran en la sección OnExit del proceso, de modo que dentro de los condicionales si la explosión toca a otro proceso bomba este muere mediante un signal(proceso_bomba_siguiente, S_Kill); provocando que esta bomba explote y la siguiente y la siguiente...

Mi problema es que no sucede en cadena... Explotan todas al mismo tiempo !! D:

¿De que forma puedo crear esta secuencia en cadena?
¿Existe alguna forma de hacer que el proceso "espere" un momento?

intente usar:
[code language="bennu"]Function int wait(float seconds)
Begin
    While( (seconds-=frame_time) > 0 ) frame; End
    return -seconds;
End
[/code]

Justo antes de la orden signal, pero no dio resultado, lo que hizo fue retrasar la explosión como tal solamente.
Pense que frame; estaba creando este problema, pero al sacarlo el programa simplemente se pega :P
¡¡Vista Spoonman Games y enterate de nuestras últimas novedades en desarrollo de vídeo juegos!!
http://www.spoonmangames.cl

Trecek

#1
Hola, antes que nada decir que soy novato en bennu, asi que corregirme si me equivoco.

La solucion que se me ocurre es que si una bomba colisiona con la explosion de otra, compruebe el estado de timer[0] por ejemplo y guarde eso en una variable "tiempo1" por ejemplo.
Luego entra en un bucle en el que comprueba timer[0] y lo compara con "tiempo1", si timer[0] excede en una cierta cantidad a "tiempo1", la bomba explota, llegando al final de su codigo y muriendo el proceso sin necesidad de signals. De hecho la cantidad en la que tenga que exceder timer[0] a "tiempo1" la puedes poner en una variable llamada "retardo_explosion" por ejemplo, para hacer mas facil el modificarlo mientras haces pruebas de a ver cuanto tiempo quieres.

En el manual de osk te viene como manejar los cronometros que trae el bennu, no creo que tengas mucho problema con ello, lo unico... que quieras por narices que mueran por signal kill, que ahi ya no me meto.

No se si te servira, espero que si. :)

Theby

 ;D yo tambien soy novato en bennu. ^^

Mi proceso bomba explota de la forma que tu me dices, cuando se coloca una bomba se evalúa timer[0] de forma que después de 3 segundos el proceso muere provocando la explosión, es por ello que cuando una bomba muere y explota, si la explosión toca otra bomba uso signal para forzar la muerte de esta otra bomba provocando la explosión en ella.
¡¡Vista Spoonman Games y enterate de nuestras últimas novedades en desarrollo de vídeo juegos!!
http://www.spoonmangames.cl

Trecek

pero... no entiendo porque es necesario signal

Trecek

aaaah, espera, creo que lo pillo, las bombas usan timer[0] para explotar, haya o no explosiones cercanas, no?

Trecek

Podrias ponerle que si colisiona con una explosion guarde timer[0] en otra variable distinta a la que usas para guardar el momento en el que se coloco esa bomba, por ejemplo "momento_explosion" y hacer lo mismo que con el caso que dices, pero en lugar de usar "retardo" con 3 segundos usar "retardo_explosion" con 0.5 segundos o algo asi.

SplinterGU

no estaras haciendo un signal( type bomba ) ?

podrias poner el codigo de eso? si quieres recortado, solo a las bombas.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Theby

Ya no es necesario Splinter ^^
Trecek tuvo la razón todo el tiempo XD ahora si funciona.

Cambie el signal para bombas, en ves de eso dentro del ciclo que determina cuanto tiempo esta la bomba mostrándose antes de morir y explotar coloque un condicional que detecta si el proceso explosion colisiona con la bomba:

[code language="bennu"]IF(collision(TYPE explosion) && muriendo==1)
   tiempo = timer[0]+10;
   muriendo=0;
END[/code]

De modo que antes de entrar al While que determina la vida de la bomba muriendo=1;
De esta forma cuando la bomba colisiona con la explosion se le corta su vida a 0.1 segundos mas, el hecho de usar la variable muriendo es para que durante el tiempo que la explosion colisiona con la bomba la asignacion nueva de tiempo se realize una sola ves.

Gracias Trecek ^^ Karma karma!
¡¡Vista Spoonman Games y enterate de nuestras últimas novedades en desarrollo de vídeo juegos!!
http://www.spoonmangames.cl

Trecek

Hey, eso tiene sentido, igual estabas enviando la señal a todos los procesos tipo bomba en lugar de por id a los procesos que colisionan con la explosion, de todas formas es que no veia la necesidad de signal ahi, pero bueno, cada uno tiene su forma de hacer las cosas.

Oh whoa!!! mi primer karma!!! dios mio!!! increible!!! portentoso!!! maravilloso!!!

solo una cosa... er....

sigo sin saber para que sirve el karma realmente XD

Theby

jajaj yo tampoco se XD

Y claro me empeñe en usar signal para todo ya que la bomba también destruye objetos así como personajes, estos funcionan a la perfección con signal pero estaba teniendo este problema para las bombas ya que la muerte no debía ser tan instantánea :P
¡¡Vista Spoonman Games y enterate de nuestras últimas novedades en desarrollo de vídeo juegos!!
http://www.spoonmangames.cl

Trecek

aaaah, por eso signal, ok, es que yo lo veia mas sencillo de la otra forma, pero claro, no soy muy amigo de usar señales, la verdad es que evito eso y usar "familiares" si puedo (father, son, bigbro...) pero no por nada en concreto, sencillamente cuestion de gustos. obviamente para objetos que han de destruirse en el momento de la explosion signal es muy comodo.

Dos preguntas off-topic
1.- Tu tambien "vienes de div"? (yo es lo ultimo que use, aunque nunca he sido bueno en esto)
2.- Me encanta el gato de la foto, es el tuyo?

Theby

Respondiendo por PM para no desviar el tema que ya esta finalizado.
¡¡Vista Spoonman Games y enterate de nuestras últimas novedades en desarrollo de vídeo juegos!!
http://www.spoonmangames.cl

gecko

Pero nos quedamos con la duda del gato! :P

jajajajaaja
Torres Baldi Studio
http://torresbaldi.com

Theby

Quote from: gecko on June 23, 2011, 04:32:28 AM
Pero nos quedamos con la duda del gato! :P

jajajajaaja

XD jaja cuando me presente dije que era mio <.< dije hasta cual era su nombre XD
¡¡Vista Spoonman Games y enterate de nuestras últimas novedades en desarrollo de vídeo juegos!!
http://www.spoonmangames.cl

SplinterGU

Quote from: Trecek on June 23, 2011, 04:12:01 AM
Hey, eso tiene sentido, igual estabas enviando la señal a todos los procesos tipo bomba en lugar de por id a los procesos que colisionan con la explosion, de todas formas es que no veia la necesidad de signal ahi, pero bueno, cada uno tiene su forma de hacer las cosas.

Oh whoa!!! mi primer karma!!! dios mio!!! increible!!! portentoso!!! maravilloso!!!

solo una cosa... er....

sigo sin saber para que sirve el karma realmente XD

me alegra, te doy un karma por apoyar la mocion y la colaboracion.

por otro lado, al usar signal(type) matas todos los procesos de un tipo, y por eso mueren instantaneos.

el gato se llama bennu, ya lo dijo... :D
Download Lastest BennuGD Release: http://www.bennugd.org/node/2