Autor Tema: ¿Se puede cambiar al padre de un proceso?  (Leído 905 veces)

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6340
  • Karma: 162
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
¿Se puede cambiar al padre de un proceso?
« en: Marzo 20, 2016, 07:02:00 pm »
Hola a todos:

Pues esa es mi pregunta ¿se puede cambiar el padre de un proceso?
Me ha surgido un problema, porque he creado una serie de procesos "botón" a través de una función, los cuales sólo están activos si una variable llamada "int ventana_foco" contiene el valor del ID de su padre... pero como su padre es esta función que muere tras la creación, pues permanecen siempre inactivos.
Lo ideal sería poder modificar la variable local "father" de los procesos botón por el ID del proceso "interfaz_principal" que es al que deberían estar ligados, pero me parece recordar que si se hacía eso, todo el sistema interno de relaciones entre procesos de fastidiaba (ando confuso porque en Unity si te dejaba hacer eso, pero no lo recuerdo en BennuGD).

Temporalmente, lo que he hecho ha sido pasarle otro parámetro llamado "mi_padre", y comparar el valor de "ventana_foco" con este valor, pero no es una buena solución, porque el proceso botón pertenece al código del sistema de interfaz que había creado, y así se genera una incongruencia con el resto de elementos. Pero si no se puede modificar al padre, pues nada, lo dejo así, no me voy a morir :P
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12887
  • Karma: 377
Re:¿Se puede cambiar al padre de un proceso?
« Respuesta #1 en: Marzo 21, 2016, 11:36:25 am »
no se puede...

por que matas al proceso padre? dejalo vivo pero dormido o cambia la logica...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6340
  • Karma: 162
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re:¿Se puede cambiar al padre de un proceso?
« Respuesta #2 en: Marzo 21, 2016, 11:57:48 am »
Por lo dicho: es una función de actualización de una lista de elementos, que incluye una lista de botones.
Aunque puedo generar todos los botones desde el proceso de control, y mantenerlos vivos todo el tiempo... o desde el proceso "interfaz_principal", que es el que, al fin y al cabo, dependen para atender a eventos del ratón o no.

Es que esto es por la lista de mapas abiertos, que aparece en la parte derecha del editor de mapas tileados, que tiene una serie de posiciones (varía la cantidad en función de la resolución de la ventana), y dos botones para hacer scroll si hay más mapas que posiciones disponibles.
Mi idea era la de tener sólo los botones de los elementos existentes, para reducir los requisitos al mínimo, y la función refrescar (invocada sólo al crear o destruir un mapa) los creaba o destruía según necesidad.

Este es el código del botón (en realidad es un switch, que cambia de "seleccionado" a "no seleccionado", y envía su ID cuando cambia de estado a una variable, que suele recogerla el padre, identificarla, y actuar en consecuencia; se echan de menos los métodos de clases o las señales en estos casos :D )

Código: [Seleccionar]
process i_switch (x, y, z, file, int graph1, int graph2, int pointer is_actionevent,
                  int pointer is_focus, int is_father)
// GRAPH1:          switch off graphic
// GRAPH2:          switch on graphic
// is_ACTIONEVENT:  variable where to put ID if mouse clic it
// is_FOCUS:        variable who tells who have the focus
// Note: graphs always has their centers on (0,0) coordinates
private
    //int is_status;
begin
    graph=graph1;
    loop
      //say (*is_focus + "   " + is_father);
        if (*is_focus==is_father)
           
         if ((mouse.x < x) || (mouse.x > (x+graphic_info(file,graph,G_WIDE)-1)) ||
            (mouse.y < y) || (mouse.y > (y+graphic_info(file,graph,G_HEIGHT)-1))  )
           
            if (teclas[_RATON_LEFT][1]==1)
               if (graph == graph1)
                  graph = graph2;
                  //is_status=true;
               else
                  graph = graph1;
                  //is_status=false;
               end
               *is_actionevent=id;
            end
         end
           
        end
        frame;
    end
end

En teoría, un switch de estos sin el foco, no debería consumir recursos. Y con el foco tampoco, a menos que el ratón esté en la vertical del mismo. En la resolución estandar son 5 botones, pero se pueden ampliar a 20 en una resolución de 768p o 40 a 1080p, más o menos :P[/code]
« última modificación: Marzo 21, 2016, 12:07:14 pm por Drumpi »
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)