PDA

Ver la versión completa : S_SLEEP -> S_WAKEUP -> no colisiones



Aiken
16/10/2009, 01:39
tengo un proceso cursor_mouse.
lo unico que hace es perseguir las coordenadas del mouse y poco mas.


En un momento determinado le hago un S_SLEEP y arranco otro proceso window_mouse, que tiene el codigo practicamente igual.


Todo va bien, hasta que mato S_KILL el window_mouse, y quiero despertar a mi viejo amigo cursor_mouse.

Se despierta, se mueve bien, se dibuja, persigue al raton e incluso es capaz de detectar colisiones contra otros procesos.

Problema, los otros procesos no detectan colisiones contra el :(
Alguna idea?
Aiken

< - >


if (collision(type cursor_mouse))
drawing_color(rgb(250,250,250));
write(0,0,0,0,"CURSOR_MOUSE encima mio");
circleid = draw_circle(x,y,100);
end


Si detecta colisiones.
En el ejemplo el texto lo veo, pero el circulo no lo dibuja o no lo veo :(

El problema es el drawing_map().
Si le pongo un drawing_map(0,0) lo dibuja pero luego no consigo borrar los circulos con delete_draw(circleid)

donde dibuja por defecto cuando se llama a la funcion circle desde un proceso y sin haber especificado ningun drawing_map?

EDIT. Lo he "solucionado" poniendo un drawing_z(-5); pero no se si es la forma correcta. Por lo que ve en la documentacion ocurre porque cuando llamas en algun otro punto del codigo a drawing_map las primitivas cambian a un modo con Z y dejan de dibujarse encima de todo que es el modo standard, pero no se como volver al modo "standard", salvo con el drawing_z(-5), es correcto?



if (collision(type cursor_mouse))
drawing_z(-5)
drawing_color(rgb(250,250,250));
write(0,0,0,0,"CURSOR_MOUSE encima mio");
circleid = draw_circle(x,y,100);
end



Aiken

Drumpi
16/10/2009, 18:24
donde dibuja por defecto cuando se llama a la funcion circle desde un proceso y sin haber especificado ningun drawing_map?

El mapa por defecto en el que dibuja es el FILE=0, GRAPH=0, correspondiente al fondo de pantalla.


EDIT. Lo he "solucionado" poniendo un drawing_z(-5); pero no se si es la forma correcta. Por lo que ve en la documentacion ocurre porque cuando llamas en algun otro punto del codigo a drawing_map las primitivas cambian a un modo con Z y dejan de dibujarse encima de todo que es el modo standard, pero no se como volver al modo "standard", salvo con el drawing_z(-5), es correcto?



if (collision(type cursor_mouse))
drawing_z(-5)
drawing_color(rgb(250,250,250));
write(0,0,0,0,"CURSOR_MOUSE encima mio");
circleid = draw_circle(x,y,100);
end



Aiken

Creo que el problema que tienes es porque el fondo de pantalla está más al fondo que el resto de procesos, creo que tenía una Z de 512 (no estoy seguro, habría que mirarlo). Cuando un proceso se crea, por defecto tiene una Z=0, por eso se ve siempre sobre el fondo.
No se si eso que haces está bien o no, no he usado drawing_z, pero parece correcto. Pero si te quieres asegurar, lo suyo sería crear un nuevo mapa, especificar que se va a dibujar en el, y tenerlo en un proceso con una Z baja.
Pero si funciona drawing_z no veo por qué tendrías que hacerlo.

Aiken
16/10/2009, 21:50
la pregunta es : las funciones de primitivas graficas, por defecto, a que profundidad grafica dibujan? porque lo que me ha pasado es que al usar drawing_map desde otro proceso creo que se me han cambiado los valores por defecto genericos que usan cuando no especificas nada.

en realidad es por saber como funciona por dentro o porque es que me haya cogido otra z, supongo que habra cogido la z del proceso que hizo el ultimo drawing_map o algo asi.

Pero bueno, gracias por tu ayuda como siempre ;) cada dia aprendemos algo nuevo.
Aiken

Drumpi
17/10/2009, 01:28
la pregunta es : las funciones de primitivas graficas, por defecto, a que profundidad grafica dibujan? porque lo que me ha pasado es que al usar drawing_map desde otro proceso creo que se me han cambiado los valores por defecto genericos que usan cuando no especificas nada.

en realidad es por saber como funciona por dentro o porque es que me haya cogido otra z, supongo que habra cogido la z del proceso que hizo el ultimo drawing_map o algo asi.

Pero bueno, gracias por tu ayuda como siempre ;) cada dia aprendemos algo nuevo.
Aiken

Lo que voy a decir es una suposición, no se basa en nada cierto, habría que conocerse el código de Fenix/Bennu para dar una respuesta o simplemente experimentar como estás haciendo.
Creo que si dibujas sobre el fondo, por lo que he entendido del wiki de Bennu, las primitivas se dibujan con la Z que defines con drawing_z, como si fuera un proceso más.
Pero esto no tiene sentido si dibujas sobre un gráfico, porque este estará asignado a un proceso con su propia Z, por lo que drawing_z no debería funcionar, y cada primitiva se dibujaría sobre la anterior en ese gráfico, y todas tendrían la Z del proceso.

Yo, muchas de las preguntas que me hago experimento antes para ver el comportamiento (en realidad primero supongo su funcionamiento y luego lo compruebo). Tengo una carpeta llamada "pruebas" con unos 50 prgs para ver este tipo de cosas (quien tiene más prioridad si modificamos size y size_x con valores diferentes, cómo funciona fgets en cada version... cosas muy puntuales). Tambien pregunto en los foros, pero sólo cuando me impaciento o no tengo ganas de programar.

SplinterGU
17/10/2009, 02:29
si no mueves el objeto luego de hacer un wakeup, puede que en fenix no lo actualice... en bennu esas cosas se manejan bien... (espacio cedido para la publicidad... :) )