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.
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
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
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 >:(
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?
Si son varios iguales tendras que guardar sus ID's en un vector, no?
no se, estoy preguntando
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.
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...).
bueno, quiero creer que free sabe que la variable tiene que ser local o publica para poder accederla... yo descartaria eso drumpi.
Si la variable es del father no tiene porque, cierto ?
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.
Me refiero a que un hijo puede acceder a las variables del padre sin que estas sean declaradas como LOCAL cierto ?
no, no es cierto
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
ya que estamos, como se declaran las variables publicas de un proceso y como accedemos a ellas estando en otro proceso ?
He declarado una variable publica en un proceso y luego esta no se reconocia..
http://forum.bennugd.org/index.php?topic=2093.0
Y lo tienes tres hilos más abajo :D :D :D
ja ja ja
debo de hacer el tuto de las variables publicas pero yaaaaaaaaa
aparte que pasar de un tuto tan simple a otro tan menos simple... :D
en mi manual lo explico...
ya pero muy basico
lol
es que el tema es muy basico y simple...
quizas se necesite entender que son los processos y como se referencian estos... y diferencias entre tipos de procesos e instancias.
Sí Futu, creo que aún deberías pelear más con cosas básicas, cuando comprendas totalmente los elementos básicos puedes pasarte a los grosos. Yo PUBLIC fue de lo último que toqué del lenguaje, al final lo entendí y es algo que no se olvida.
pues a mi lo de las variables public me encanta porque me parece muy sencillo para lo potente que es.
Si tienes la id de un proceso puedes acceder tanto a sus variables públicas como locales. La diferencia es que las variables públicas las puedes especificar para cada proceso de manera individual, pero claro, luego debes declarar la estructura de ese proceso para que los demás lo conozcan. Las variables locales son mas cómodas pero se aplican a todos los procesos, con el chorreo de memoria que eso implica. Todos los procesos tienen una serie de variables locales predefinidas, como x y z y son las que nos han mal acostumbrado. Yo creía que dominabas estas cosas futu