CPROCESS * fget_id( CPROCESS * identificador,
char * tipo_proceso )
CPROCESS * fget_id(
CPROCESS * identificador, char * tipo_proceso,
int igual )
Retorna:
El código identificador de un proceso o (0) si no encontró el proceso.
Descripción:
Comprueba si hay procesos del tipo especificado activos. En caso afirmativo, esta función devolverá el código identificador de uno de ellos y, en el caso contrario, devolverá un 0.
Si existen varios procesos del tipo que se ha especificado, la función fget_id() devolverá el resto de los identificadores en las sucesivas llamadas que se realicen a la misma.
Una vez se hayan devuelto todos los códigos identificadores, la función devolverá 0, hasta que se vuelva a ejecutar una sentencia FRAME, momento a partir del cual esta función devolverá, de nuevo, todos los códigos identificadores de los procesos del tipo indicado.
Para obtener de esta forma todos los códigos identificadores de los procesos no se debe utilizar la sentencia FRAME entre dos llamadas consecutivas a la sentencia fget_id(). En el caso de ejecutar una sentencia FRAME, esta función volverá a retornar todos los códigos identificadores de procesos desde el primero.
Algo similar sucede si se ejecuta una llamada a la función especificando un tipo de proceso diferente; si tras esto se vuelven a pedir identificadores del tipo de proceso anterior, esta función también los volverá a retornar todos desde el primero.
Si se llama a la función fget_id() con un parámetro de entrada "jugador", si existen procesos que se llamen "jugador1", "jugador2", etc. estos también serán devueltos, es decir si se escribe: fget_id(this, "j") todos los procesos que su tipo contenga una 'j' serán devueltos.
Si se llama a la función fget_id( , , 1) con un parámetro de entrada "jugador", si existen procesos que se llamen "jugador1", "jugador2", etc. estos también no serán devueltos, es decir si se escribe: fget_id(this, "j", 1) todos los procesos que su tipo contenga una 'j' no serán devueltos, solo los que se llamen exactamente 'j'.
Nota: El parámetro identificador es necesario para que cada procesos guarde la posición de búsqueda de procesos para la siguiente llamada a esta función.
PROCESS_INIT( proceso_movil )(int _x, int _y, int _graph) BEGIN_INIT x=_x; y=_y; graph=_graph; END_INIT BEGIN LOOP FRAME; END MAIN_PROGRAM_CDIV PRIVATE CPROCESS * identificador_proceso; int contador; BEGIN_PROGRAM set_gfx(GFX_AUTODETECT_WINDOWED); set_mode(m320x200); load_fpg("../help.fpg"); put_screen(1, 1); for(contador=1;contador<=20;contador++) new proceso_movil(rand(0, 319), rand(0, 199), 101); LOOP{ for( contador = 1; contador <= 20; contador++){ // Cogemos los identificadores de los procesos identificador_proceso = fget_id(this, "proceso_movil"); identificador_proceso->angle += rand(-5000, 5000); } FRAME; } END_PROGRAM
En el ejemplo, después de cargar el fichero de gráficos y poner la pantalla de fondo, se crean 20 procesos tipo proceso_movil con sus posiciones elegidas aleatoriamente y un triángulo como su gráfico.
Estos procesos únicamente ejecutarán sentencias FRAME dentro de un bucle, para visualizarse.
Desde el programa principal se van cogiendo los identificadores de los procesos tipo proceso_movil con la función fget_id() (guardándolos en la variable identificador_proceso) y utilizándolos para modificarles el ángulo (su variable local angle).
Al disponer del código identificador de un proceso se pueden consultar o modificar sus variables locales (como angle en este ejemplo) o bien enviar señales al proceso con la función signal().
La función collision() sirve para obtener los códigos identificadores de procesos de un tipo determinado que, además, colisionen (choquen) con el proceso actual.
Ver: Formas de obtener el código identificador - Tipos de procesos - Códigos identificadores