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'??
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 ;)
Otra opción es quitarle el gráfico:
graph=0;
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;
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
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
Y ya para rematar, si no es necesario que se ejecute la logica se le puede dar también un signal S_SLEEP ;D
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.
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.
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
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.
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.
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...
no, estoy viendo mejor que es mejor eliminarlos, tambien es con signal???
sip:
signal(IDdelproceso, s_kill);
Quote from: DjSonyk on November 28, 2010, 07:31:17 PM
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...
si...
Quote from: Futublock on November 28, 2010, 09:37:42 PM
no, estoy viendo mejor que es mejor eliminarlos, tambien es con signal???
si...
Quote from: SplinterGU on November 29, 2010, 12:05:08 AM
Quote from: DjSonyk on November 28, 2010, 07:31:17 PM
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...
si...
Ya era una afirmación.... :P
no....
:o, ;D
tambien hay que identificar al proceso??
k+
Quote from: Futublock on November 29, 2010, 07:31:23 PM
tambien hay que identificar al proceso??
k+
Obviamente, necesitas su ID para mandarle una señal, de lo contrario ¿a quién se la mandas? :)
fuuuuuu, eso de identificar...
complicaciones que despues no lo son
Tienes para ello:
GET_ID (puedes definir un tipo de proceso por su nombre).
El valor que devuelve al invocar al proceso.
COLLISION.
ID, FATHER, SON, BIGBRO...
Vamos, que hay forma de identificar los procesos. Almacenar los ID es lo más complejo, pero nada que no hayas visto ya con los FPG.