Nueva duda

Started by BlySntK, March 13, 2012, 06:49:40 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

BlySntK

Al quitarle una vida al personaje, este vuelve a la misma pantalla en la que se inicia originalmente. Bien, mi problema es, que, cuando vuelve a comenzar con una vida menos, el proceso se vuelve a llamar y eso no mola porque el rendimiento y tantas otras cosas empiezan a fallar, al igual que si digo no quiero jugar porque se me han terminado todas las vidas y como desarrollador quiero que el juego vuelva a los títulos... Estoy mirando de funcionar con signals pero siempre me tira a los exits porque el proceso is dead... ¿cómo soluciono el problema? Lo tengo para que el propio proceso personaje, una vez muerto, se haga un signal porque luego va a volver a ser llamado y no quiero que haya dos proceso o más iguales circulando.
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

haitortiya

#1
Buenas otra vez. Me gusta el titulo, pero puedes poner entre () el tema en si :)

Vamos por partes y espero responder a todo, por que como suelo decir, aqui nadie organiza sus dudas en puntos, para que sea
mas facil contestar...

- Lo del tema de la vida, yo supongo que dices que cuando vuelves a comenzar, no hace las cosas segun esta nueva vida, no se como
tienes la vida puesta, pero puedes hacer esto: Creas un sistema de guardado automatico que cada 10 seg se guarde, para no cargar
mucho la memoria, ( Usando Save y Load ) y asi cuando tu quieras la vida estara como desees. Ahora lo otro que he entendido de esto,
que hay algun proceso que va con la vida y que se llama. Bueno, segun lo guardado, pones un "if ( vida_guardada == 10 )", por ejemplo.

- Para invocar un proceso UNICO, o asi los llamo yo, que solo existen una vez y para nada quierse que haya dos, invocalos siempre usando
exists "If ( not exists (id_proceso) ) id_proceso = proceso(); end". Y cuando quieras matarlo, olvidate de signals, usa break; .
*Olvidate de lso signals si quieres matar un proceso desde si mismo, un campeon que muere, usa break, no se tira un signal a si mismo,
por mi experiencia da menos fallos.

- Por ultimo una anotacion, no abuses del Signal, matar muchos procesos sin control acabara dando fallo ( "El tipico fallo de error 623..." )
por el que te preguntas, ¿que ha pasado?, y es que has matado algo que no existe. ( Ami me pasa mucho ).

Un saludo y espero haberte ayudado, si no he ayudado mucho, intenta explicarte mejor o puntua tus preguntas :)

Edito: Para volver al menu de titulos, que dices que cuando se le acaben las vidas, vuelva, no tiens por que matar los procesos uno a
uno, usa la funcion "let_me_alone()" dentro del menu de titulos en el begin, y mataras todo lo que este vivo excepto ese menu.
Mi pagina web, donde cuelgo todos mis Proyectos

Gracias por entrar y ver su contenido

http://haitortiyagames.com.ar/

El Ultimo Dominador!!!!
http://haitortiyagames.com.ar/elultimodominador/inicio.html

BlySntK

Gracias haitor :) Verás, tengo dos procesos de momento, uno lanza a todos los demás y, si muriera, se reventaría todo el juego. Uno de esos procesos que lanza es al personaje, a la vida del personaje, etc.. Por tanto, si el personaje muere, ha de volver a invocarlo el proceso que lo lanzó, lo cual, no puedo matarlo porque es cuando ma error, y si no lo mato tengo 50 procesos iguales y me consume demasiados recursos.

Sí, tengo una manera de guardar la última vida que tenía antes de matarse y por medio de esa variable, puedo elegir qué hacer. Aunque tu idea de un salvado automático no me disgusta en absoluto pero... no funcionaría con la estructura en que tengo el juego, que es una forma de obtener vidas muy de vez en cuando y perderlas como en cualquier plataformas, que le mate un enemigo o que caiga al vacío. Lo que dices de los signals tienes muchísima razón y he de mirarlo, intento lo más que puedo usar breaks para que los procesos se mueran sólos y así tengo algunos, sobre todo la gravedad que me muere sola y eso es un alivio. Pero la cuestión es esa, quiero restarle vida al persona y que éste vuelva a ser llamado por el proceso que lo invocó sóla y exclusivamente a él y a si medidor de vida, el medidor lo hace sin problemas pero el personaje... quizas debería quitar el signal suyo que tiene pero... con un break no se hasta que punto funcionará...
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

haitortiya

Suponiendo que tu problema es que te puede dar fallor al invocar y que no quieres que haya 20 procesos, no encuentro la logica
del problema, pero para salirnos de dudas te pongo un ejemplo


Este es el proceso del "Invocador"
process invocador()
          begin
               let_me_alone();

               loop
                    if ( not exists ( type protagonista)) id_protagonista = campeon(x,y); end
                    if ( not exists ( id_barravida ) ) id_barravida = barravida(x,y); end
         frame;end frame; end

Este es el proceso del "Protagonista"
process protagonista(x , y)
          begin
               loop
                  if ( vida <= 0 ) break; end
              frame;end frame;end



No se te tiene que cargar pero para nada, el juego, ya que tal y como me cuentas, tienes que tener 2 menus y 2 procesos activos
a la vez todabia. Por lo cual, el codigo que te he puesto seria una recreacion de lo que deverias tener para que muriese.
Y si persiste el fallo de que te va lento, etc... Copiame el codigo de el "Invocador" y el "Protagonista" aqui y los reviso.

La unica razon de fallo seria, una de dos, que invocases dentro del loop a el protagonista, sin ningun requerimiento, por lo cual,
cada frame te invocara uno, y 30 frames son un segundo, asi que imaginate...

Si con esto no te resuelvo la duda, copiame el codigo aqui. ( Por curiosidad, ¿cuanto tiempo llevas programando en bennu? )
Mi pagina web, donde cuelgo todos mis Proyectos

Gracias por entrar y ver su contenido

http://haitortiyagames.com.ar/

El Ultimo Dominador!!!!
http://haitortiyagames.com.ar/elultimodominador/inicio.html

BlySntK

Ya llevo casi 6 meses programando, si me defiendo bastante bien, lo que pasa que tengo una manera de programar un poco excentrica, soy el primero que se crea sus diagrámas de flujo pero luego, a la hora de llevarlo al código, no son ni lo que parecían ser en el papel, así que los termino haciendo sobre la marcha... porque me entero mejor de lo que hago. Pero cuando surjen problemas de estos imprevistos, sé que tengo que hacer pero, el código, pues lo pongo mal o me dejo algo sin poner o lo hago de manera dificil...

Voy a mirar a ver cómo lo tengo todo expuesto porque sé que le estoy dando vueltas a algo que sé que no me estoy dando cuenta y estoy dejandome, como siempre. Pero vamos, me has dicho algo antes que creo que es por ello por lo que tengo tanto error, y es que me cebo con los signals y, claro... luego todos los procesos se me mueren sin saber exactmente por qué...
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

haitortiya

Hay dos cosas que tienes que tener en cuenta:

- Mucho cuidado al invocar un proceso, invocalo una vez e intenta que no dos iguales nunca.
         Dos procesos distintos serian:
                id_proceso1 = proceso();
                id_proceso2 = proceso();
         Son el mismo proceso, pero se identifican de manera distinta y a la hora de hacerles un Signal, se diferenciaran de si los dos.

- El signal es para lo que es, ( me refiero al S_kill unicamente ) para matar procesos ajenos al que lo ejecuta. Como consejo, nunca
pongas un signal en el proceso que va a morir. Usa break.

Revisa bien el codigo, yo creo que los problemas estan hay, y si ya te ha salido perfecto, tema cerrado :) ( Si no, copiame el codigo )

Espero haberte ayudado, un saludo.
Mi pagina web, donde cuelgo todos mis Proyectos

Gracias por entrar y ver su contenido

http://haitortiyagames.com.ar/

El Ultimo Dominador!!!!
http://haitortiyagames.com.ar/elultimodominador/inicio.html

BlySntK

Quote from: haitortiya on March 13, 2012, 10:03:32 PM
Hay dos cosas que tienes que tener en cuenta:

- Mucho cuidado al invocar un proceso, invocalo una vez e intenta que no dos iguales nunca.
         Dos procesos distintos serian:
                id_proceso1 = proceso();
                id_proceso2 = proceso();
         Son el mismo proceso, pero se identifican de manera distinta y a la hora de hacerles un Signal, se diferenciaran de si los dos.

- El signal es para lo que es, ( me refiero al S_kill unicamente ) para matar procesos ajenos al que lo ejecuta. Como consejo, nunca
pongas un signal en el proceso que va a morir. Usa break.

Revisa bien el codigo, yo creo que los problemas estan hay, y si ya te ha salido perfecto, tema cerrado :) ( Si no, copiame el codigo )

Espero haberte ayudado, un saludo.

De nuevo, GRACIAS!! Y karma++, realmente lo estaba haciendo bien, me fallaba que no hacía con todos los procesos igual un break, además de que llamaba todo el rato al mismo proceso para que lanzara los demás cosa absurda porque no sirve de nada, sólo para acumular procesos y ralentizar. Era más fácil que si un sólo proceso lanzaba los demás y lo utilizaba a parte para finalizar el juego, qué mejor que gestionarlos todos desde el propio proceso por medio del loop.. así me ha funcionado todo perfectamente. Ahora expandiré lo demás haciendo exactamente lo mismo. Voy a intentar ir haciendo los diagrámas para saber cómo voy haciendo las cosas y cómo está definitivamente los procesos ya creados y bien armados y así, para proximas, sabrá que hacen y cómo se comportan.

Cierro tema.
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)