problemas de 'z' con procesos?

Started by Futu-block, November 28, 2010, 10:12:01 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Futu-block

quiero cambiar la 'z' de algunos procesos para que no mueran, solo desaparezcan y estoy teniendo problemas...

¿hay que ponerles la 'z' predefinida antes de modificar nada?
si no se las pones que usa por 'z'??

BoMbErLiNk

En lugar de Z puedes usar alpha=0; si quieres que desaparezcan, es decir, con Z solo vas a hacer que pinte por delante o detrás de otro proceso  ;)

Yawin

Otra opción es quitarle el gráfico:
graph=0;
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

DCelso

tienes que jugar con alpha (es una variable que tienen todos los procesos, tipo x, y,z) para hacerlos desaparecer, z solo sirve para dibujarlos antes o despues a otros procesos y así parecer que están mas lejos o cerca, pero collision seguirá colisionando con ellos.
Así que si pones alpha = 0 , desaparecerá el proceso independientemente de la z que tenga, y para volver a hacerlo aparecer alpha = 255;

Aún así los procesos siguien colisionando con collision, porque en verdad esta función sigue comprobando los colores de los píxeles aunque no se vean, así que antes de hacer collision tendrás que comprobar si alpha vale 0 para saltarte las colisiones.

Otra forma un poco más drástica pero que sirve para no tener que estar comprobando si alfa vale 0 antes de usar collision es tener una imagen adicional al proceso transparente y cambar el graph a esa imagen cuando quieras que tu proceso sea transparente y no choquen contra él, por ejemplo:

process miproceso()
private
    imagen_transparente;
public
    transparente;
begin
   imagen_transparente = new_map(2,2,16);
   map_clear(0,imagen_transparente,0);
   loop
       if (key(_t))
          transparente = 1;
      else
          transparente = 0;
      end
       if (transparente == 1)
          graph = imagen_transparente;
       else
          graph = imagendelproceso;
       end  
       ....
       frame;
   end
   unload_map(0,imagen_transparente);
end
// desde el exterior podríamos hacer.
id_miproceso = miproceso().
id_miproceso = 1;
....
id_miproceso = 0;

Monstruos Diabólicos

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

DCelso

umn, la de quitarle el gráfico está bien :D, puedes hacer lo que puse en el ejemplo pero sin crear la imagen transparente, es decir asignando directamente 0 en vez de imagen_transparente.
:D
Monstruos Diabólicos

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

Yawin

Quote from: DCelso on November 28, 2010, 10:39:01 AM
umn, la de quitarle el gráfico está bien :D, puedes hacer lo que puse en el ejemplo pero sin crear la imagen transparente, es decir asignando directamente 0 en vez de imagen_transparente.
:D

Al fin y al cabo, si no hay gráfico, no hay colisión xD
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

BoMbErLiNk

Y ya para rematar, si no es necesario que se ejecute la logica se le puede dar también un signal S_SLEEP  ;D

SplinterGU

Quote from: BoMbErLiNk on November 28, 2010, 11:06:18 AM
Y ya para rematar, si no es necesario que se ejecute la logica se le puede dar también un signal S_SLEEP  ;D

esto iba a responder yo... gracias bomber.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

Uff, pero eso complicaría un poco la lógica, no mucho pero algo sí, tendrías que crear otro proceso para controlar cuando dormirlo y cuando despertarlo o hacerlo desde el proceso main, por tanto no sería él mismo quien controlase cuando se pone transparente o no, sería un proceso externo necesitando de variables globales y tal. :D.
Monstruos Diabólicos

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

Futu-block

vamos a ir por partes y dividamos el tema...
los procesos a ocultar bajo el fondo estan libres de colisiones, lo que quiero es ocultarlos mismamente, que tambien se pueden hacer desaparecer con:[code language="bennu" options="singleline"]alpha = 0;[/code]

por otro lado, puede que me interese esa funcion de dormirlos ya que le he quitao el alfa...
¿como seria?

explication for dummie plis

DjSonyk

Basicamente : signal (codigo identificador del proceso a dormir,s_sleep); lo puedes dormir dentro del mismo proceso con :
signal (id,s_sleep); pero para despertarlo tendria que ser desde otro lado ya que el proceso al estar dormido no ejecuta codigo del el mismo,que esto es lo que se referia DCelso.

SplinterGU

Quote from: DCelso on November 28, 2010, 06:16:30 PM
Uff, pero eso complicaría un poco la lógica, no mucho pero algo sí, tendrías que crear otro proceso para controlar cuando dormirlo y cuando despertarlo o hacerlo desde el proceso main, por tanto no sería él mismo quien controlase cuando se pone transparente o no, sería un proceso externo necesitando de variables globales y tal. :D.

nunca dijo que necesitaba que los procesos ejecuten su logica o que colisionen, por eso todos los consejos son validos segun necesite, puede que solo necesite tener los procesos ahi, pero sin que interactuen con el sistema, o tener procesos que no tengan logica pero si sirvan para colisionar, segun el caso se les puede poner alpha a 0, poner size a 0, poner graph a 0, mandarlos a dormir o frezarlos, o combinacion de algunos de estos metodos.

el problema es que si no se es especifico con lo que se pregunta, las opciones pueden ser muchas y las respuestas muchas veces no seran las mejores.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DjSonyk

Humm ,pero con alpha a 0 ,aun se detecta las colisiones al menos con el ratón...
Lo se porque ,acabo de tener una idea para el editor,si ahora hay una nueva tecla "V" que oculta/muestra todos los objetos...
Bueno el caso esque si que colisionan,hago click derecho sobre ellos y me aparece la ventana de edición del objeto en cuestion.
Lo digo en modo de aclaración para que la gente lo tenga en mente...

Futu-block

no, estoy viendo mejor que es mejor eliminarlos, tambien es con signal???

Yawin

Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end