Un proceso es un objeto independiente del programa que ejecuta su propio código y que puede tener sus propias coordenadas, gráficos, etc., por ejemplo pueden ser procesos de un programa: una nave, un disparo o un enemigo.
Cuando se pone dentro de un programa algo similar a esto:
PROCESS( disparo )
Se están especificando las sentencias que van a ejecutar los procesos "de tipo disparo", es decir, el código que va a regir su comportamiento.
Como se puede observar puede haber en un programa más de un proceso tipo disparo, luego ¿cómo se diferencian unos de otros? Sencillamente, por su código identificador.
Cada vez que en un juego se crea un nuevo proceso, a éste le es asignado un código identificador; este código va a ser la referencia exclusiva del proceso hasta el momento en el que desaparezca.
Dos procesos diferentes no tendrán nunca el mismo código identificador a la vez; sin embargo, el código que perteneció a un proceso que ya ha desaparecido le puede ser asignado a un nuevo proceso (algo así como el número del carnet de identidad).
Los código identificadores son siempre números enteros positivos, como podrían ser 471, 1936 o 10823, estos a su vez son punteros a procesos.
Todos los procesos tienen su propio código identificador en this, que es algo similar a una variable local del proceso, salvo que no puede modificarse.
Los procesos, además, tienen el código identificador del proceso que les creó (el que los llamó) en father (padre), el del último proceso que ellos crearon (el último que llamaron) en son (hijo), etc. (ver Jerarquías de procesos).
¿Para qué sirven los códigos identificadores?
Normalmente, todos los procesos necesitan el código identificador de los demás procesos para interactuar con ellos (ver donde están, modificarlos, ...).
No se puede, por ejemplo, restarle energía al proceso "enemigo", pues procesos de ese tipo pueden no existir ninguno o existir muchos; se necesita el código identificador concreto del proceso enemigo al que se quiere restarle energía.
Un proceso accede a todas sus propias variables simplemente por sus nombres, como x, size o graph. Pues bien, si se dispone del identificador de un proceso (en son, father o cualquier variable definida por el usuario, como id2) se puede, entonces, acceder a las variables de dicho proceso como: (son->x, father->size o id2->graph), es decir, la sintaxis para acceder a variables locales de otro proceso es:
código_identificador->nombre_variable
Pudiéndose utilizar dichas variables normalmente para consultarlas o modificarlas.
No es posible en ningún caso acceder a variables de tipo PRIVATE de otro proceso}. Si se quiere acceder a una variable privada de otro proceso, se debe cambiar la declaración de ésta a la sección PUBLIC para convertirla en una variable local; entonces, cualquier proceso podrá acceder a dicha variable teniendo el código identificador del proceso, ya que todos los procesos poseerán dicha variable.
Los identificadores tienen más usos que el acceso a variables locales ajenas, como puede ser la función signal() que puede enviar determinadas señales a un proceso si se dispone de su código identificador (por ejemplo, para eliminar el proceso).
También hay otras funciones, como collision(), para detectar colisiones (choques) con otros procesos que, en caso de detectar una colisión, devuelve el código identificador del proceso con el cual se está chocando. Una vez se tiene dicho código, se puede acceder a las variables del proceso y enviarle señales.
La función get_id() funciona de forma similar a collision(), obteniendo el código identificador de un proceso, pero sin necesidad de que se produzca una colisión con él.
Ver: Formas de obtener el código identificador de un proceso