Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: FreeYourMind on April 02, 2011, 06:23:37 PM

Title: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: 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.









Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: OscarBraindeaD on April 02, 2011, 07:17:56 PM
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
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: Windgate on April 02, 2011, 08:24:54 PM
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
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: 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 >:(
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: Futu-block on April 02, 2011, 10:28:07 PM
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?
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: Abram on April 02, 2011, 10:45:34 PM
Si son varios iguales tendras que guardar sus ID's en un vector, no?
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: Futu-block on April 02, 2011, 10:52:23 PM
no se, estoy preguntando
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: SplinterGU on April 02, 2011, 11:37:19 PM
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.
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: Drumpi on April 03, 2011, 01:12:15 AM
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...).
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: SplinterGU on April 03, 2011, 03:10:04 AM
bueno, quiero creer que free sabe que la variable tiene que ser local o publica para poder accederla... yo descartaria eso drumpi.
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: FreeYourMind on April 03, 2011, 07:37:23 AM
Si la variable es del father no tiene porque, cierto ?
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: SplinterGU on April 03, 2011, 10:27:01 PM
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.
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: FreeYourMind on April 03, 2011, 10:38:56 PM
Me refiero a que un hijo puede acceder a las variables del padre sin que estas sean declaradas como LOCAL cierto ?
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: SplinterGU on April 03, 2011, 10:40:25 PM
no, no es cierto
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: Abram on April 03, 2011, 11:11:33 PM
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
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: FreeYourMind on April 03, 2011, 11:27:50 PM
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..
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: Drumpi on April 03, 2011, 11:45:17 PM
http://forum.bennugd.org/index.php?topic=2093.0

Y lo tienes tres hilos más abajo :D :D :D
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: Futu-block on April 04, 2011, 07:35:37 AM
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
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: osk on April 04, 2011, 12:46:05 PM
en mi manual lo explico...
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: Futu-block on April 04, 2011, 08:04:56 PM
ya pero muy basico
lol
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: SplinterGU on April 04, 2011, 10:49:50 PM
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.
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: Windgate on April 14, 2011, 11:24:38 AM
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.
Title: Re: Como acceder a las propiedades de un proceso a traves del id de collision ?
Post by: Danielo515 on April 15, 2011, 10:41:08 PM
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