Como acceder a las propiedades de un proceso a traves del id de collision ?

Started by FreeYourMind, April 02, 2011, 06:23:37 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

FreeYourMind


Hola.

Tengo unas dudas sobre acceder a las variables de otros procesos cuando tenemos collision.


Tengo un proceso:

Objeto (x, y, Pos)


y creo 2 llamadas al mismo:

Objeto (100, 100, 0):
Objeto(120, 100, 1);


Lo que quiero es que si nuestro proceso tiene Pos = 1, solo en este caso haga el calculo de colision,
dentro del proceso tengo algo así:


LOOP

.....


id_objeto_adjacente = collision (TYPE Objeto);

IF (Pos == 1 AND id_objeto_adjacente)

    //IF (id_objeto_adjacente.Pos == 0) // Es algo así que necesito, sólo quiero imprimir el texto si colisiona con un objeto que tenga Pos = 0
     say("He colidido con un proceso que tiene Pos = 0");
    //END
END


FRAME;
END

...


La comprobación de cosilision solo lo hacen los procesos que tengan Pos = 1, esto esta OK, pero
al hacerlo sólo quiero imprimir el mensaje (o hacer lo que sea), si el proceso con el que he colidido
fue creado con valor Pos = 0.

Esto es posible en un DIV-LIKE ?
Que soluciones tendria para hacer esto ?

Muchas gracias benuseros.










OscarBraindeaD

Quote from: FreeYourMind on April 02, 2011, 06:23:37 PM

Hola.

Tengo unas dudas sobre acceder a las variables de otros procesos cuando tenemos collision.


Tengo un proceso:

Objeto (x, y, Pos)


y creo 2 llamadas al mismo:

Objeto (100, 100, 0):
Objeto(120, 100, 1);


Lo que quiero es que si nuestro proceso tiene Pos = 1, solo en este caso haga el calculo de colision,
dentro del proceso tengo algo así:


LOOP

.....


id_objeto_adjacente = collision (TYPE Objeto);

IF (Pos == 1 AND id_objeto_adjacente)

    //IF (id_objeto_adjacente.Pos == 0) // Es algo así que necesito, sólo quiero imprimir el texto si colisiona con un objeto que tenga Pos = 0
     say("He colidido con un proceso que tiene Pos = 0");
    //END
END


FRAME;
END

...


La comprobación de cosilision solo lo hacen los procesos que tengan Pos = 1, esto esta OK, pero
al hacerlo sólo quiero imprimir el mensaje (o hacer lo que sea), si el proceso con el que he colidido
fue creado con valor Pos = 0.

Esto es posible en un DIV-LIKE ?
Que soluciones tendria para hacer esto ?

Muchas gracias benuseros.



Hola Free,
si te he entendido bien, que quizás no, creo que necesitas algo como esto:


[code language="bennu"]
LOOP

.....

if (pos==1)
    id_objeto_adjacente = collision (TYPE Objeto);
    if(exists(id_objeto_adjacente))
        if(id_objeto_adjacente.pos==0)
            say("He colidido con un proceso que tiene Pos = 0");
        end
    END
END


FRAME;
END

[/code]

Salud

Windgate

Pero acceder a la variable pos desde el id de proceso sólo va a ser posible si la variable ha sido definida como LOCAL.

En general puedes acceder a las variables locales predefinidas como x, y, graph, etc.

Luego puedes usar PUBLIC, pero eso mejor déjalo para cuando domines mejor el lenguaje xD
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

FreeYourMind

Lo de local lo utilizo en otra cosa igual me sirva. Lo de
id_objeto_adjacente.Pos == 0 no va funcionar porque no se reconoce. Gracias por recordarme que no domino el lenguaje  ;D >:(

Futu-block

eso es exactamente lo que busco; varios procesos iguales que cuando colisione con un protagonista, este ultimo cambie las variables publicas del proceso el cual ha colisionado...

facil ¿no?

Abram

Si son varios iguales tendras que guardar sus ID's en un vector, no?

Futu-block


SplinterGU

no, si solo cuando pos vale 1 tenes que hacer el testeo de la collision no hagas lo que propones, no calcules la collision cuando no la necesites... entonces la cosa es asi...

if ( pos && (id_objeto_adjascente = collision( type Objeto ) ) && !id_objeto_adjascente.pos )
  say("He colidido con un proceso que tiene Pos = 0");
end


con esto solo va a hacer collision si pos es diferente de 0, y si id_objecto_adjascente es != 0, entonces va a chequear la variable pos de dicho objeto, y si esta vale 0, entonces ejecuta lo que esta dentro del if.

por otro lado, los id devueltos de un collision no requieren hacer un exists previo, ya que collision devuelve id de procesos existentes... solo seria necesario hacer un exists si entre el collision y el uso del id recuperado se ejecuto una instruccion frame o yield.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Quote from: FreeYourMind on April 02, 2011, 09:02:51 PM
Lo de local lo utilizo en otra cosa igual me sirva. Lo de
id_objeto_adjacente.Pos == 0 no va funcionar porque no se reconoce. Gracias por recordarme que no domino el lenguaje  ;D >:(

Sólo funcionará si POS es una variable que se pueda acceder desde fuera del proceso. En cualquier DIV-like, sólo existen las variables LOCAL, con el consiguiente desperdicio de memoria (todos los procesos tendrán su propia variable POS, aunque no la usen).
En Bennu tienes la posibilidad de usar variables tipo PUBLIC. Son fáciles de usar, pero tienen un par de requisitos especiales:
-Declarar el proceso/función con todas sus variables públicas (y creo que privadas).
-El proceso que accede a dicha variable debe guardar el ID del otro proceso en una variable cuyo tipo sea el nombre del otro proceso (no puede ser INT, BYTE, WORD, CHAR, STRING, etc...).
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

bueno, quiero creer que free sabe que la variable tiene que ser local o publica para poder accederla... yo descartaria eso drumpi.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind


SplinterGU

Quote from: FreeYourMind on April 03, 2011, 07:37:23 AM
Si la variable es del father no tiene porque, cierto ?

no tiene por que, que cosa?

si te refieres a chequear por exists... si tiene que... ya que la existencia (vida) de un hijo no implica la vida eterna de un padre.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Me refiero a que un hijo puede acceder a las variables del padre sin que estas sean declaradas como LOCAL cierto ?

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Abram

Piensa que poner father no es mas que hacer referencia a su ID, y su id solo contiene las variables locales, las privadas como su propio nombre indica son eso, privadas para el proceso xD