Variable pública

Started by FPintaluba, June 04, 2010, 04:55:20 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

FPintaluba

Hola  :)

Tengo un problema con una variable pública.

Dentro del proceso Ball(), antes del begin, tengo lo siguente:
[code language="bennu"]
public
   int life;
end[/code]

Tengo también una variable GLOBAL(antes de process Main()), llamada BALL, la cual es el identificador de Ball(), la cual fue asignada en el begin de Main().

El problema viene con un proceso hijo de un proceso inicializado tambien en Main.
No me reconoce lo que es BALL.life, me dice Unknown Identifier.

Gracias por leer!

grisendo

Yo huyo de las public porque me parecen muy raras de declarar... :P

Sólo le he usado una vez por eso, y lo hice así, poniendo esto ANTES de los GLOBAL:

[code language="bennu"]
DECLARE PROCESS ball() // Aquí tienes que poner también parámetros si los tienes
    PUBLIC
        int life;
    END
END
[/code]

Luego ya declaras el proceso main y el proceso ball, debería irte.

Por cierto, te recomiendo que no nombres igual un proceso que una variable, yo usaría ball para el proceso e id_ball para el identificador (no sé si bennu las distingue, pero no tentemos a la suerte...). Ni con distintas mayúsculas/minúsculas como es tu caso, ya que en ese caso bennu no las distingue

SplinterGU

funciona bien declarar variables y procesos con los mismos nombres.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

grisendo

No estaba seguro, la duda me venía por el tema de que igual se hacía la picha un lío al utilizar "type ball" en colisiones y bucles... pero bien pensado no tiene sentido, type sólo se aplica a procesos... Bueno es saberlo ;D

Ahora, nombres de variables no los distingue de tipos de variable, no?

[code language="bennu"]
type point
   int x;
   int y;
end
int point;
[/code]

Lo pregunto por el tema de sizeof aplicado a ambos casos...

FPintaluba

Hola, puse:

[code language="bennu"]
DECLARE PROCESS Ball()
   public
      int life;
   end
END
[/code]

Detrás de las declaraciones globales, y me sigue tirando que BALL.life no existe  ???

DjSonyk

Buenas ,me imagino que a la hora de crear el proceso ball lo hicistes de esta forma  :

ball=ball();

de no ser asi posiblemente ahi tengas el error...
Si es asi estaria bien que nos enseñaras algo mas de codigo.

Saludos

grisendo

No era necesario antes de const creo, exageraba  ;D pero antes de Bala sí. Te dejo mi ejemplo simplificado:

[code language="bennu"]
PROGRAM VIDEOJUEGO;
INCLUDE...

DECLARE PROCESS barraVelocidad(int ini, int x, int y, int z)
   PUBLIC
       int tiempo;
   END
END

CONST
   ...
END

GLOBAL
   id_barra;
END

BEGIN
   id_barra=barraVelocidad();
   LOOP
       say(id_barra.tiempo);
       FRAME;
   END
END

PROCESS barraVelocidad(int ini, int x, int y, int z)
BEGIN
   tiempo=0;
   LOOP
       tiempo++;
       FRAME;
   END
END
[/code]

SplinterGU

lo que pasa es que ball al tener una publica se transforma en una clase de datos, entonces las variables que usaras para referencias a las publicas debe ser del tipo ball... por ejemplo.


ball pid;
...

pid.life

...

edit: grisendo, lo que pusiste no va a funcionar.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

grisendo

¿No? ¿Por qué? No es exactamente el código que hice funcionar, es una adaptación simplificada (sin probar) de una cosa que me funcionaba, pero no logro ver que haya algún fallo...

Drumpi

Creo recordar que para acceder a la variable pública, primero necesitas el ID del proceso que tiene dicha variable, y almacenarlo en otra variable del proceso que lo va a leer PERO dicha variable contenedora no es de tipo INT, sino del tipo "nombre-del-proceso-que-tiene-la-variable-pública".
Algo así:

DECLARE PROCESS bola ()
PUBLIC
int variable;
END
END

PROCESS pepito ()
PRIVATE
bola dato;
BEGIN
dato=get_id(type bola);
x=5+dato.variable;
(...)
END


Esto es de memoria, no suelo usar públicas, lo mismo me he confundido.
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

eso mismo, muy bien drumpi... te ganaste un premio... karma por hacer la tarea.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

grisendo

#11
Ok, el tipo :P Ahora, esto iría, no? Porque lo del get_id(type barraVelocidad) no tuve que hacerlo nunca:

[code language="bennu"]
PROGRAM VIDEOJUEGO;
INCLUDE...

DECLARE PROCESS barraVelocidad(int ini, int x, int y, int z)
   PUBLIC
       int tiempo;
   END
END

CONST
   ...
END

GLOBAL
   barraVelocidad id_barra;
END

BEGIN
   id_barra=barraVelocidad();
   LOOP
       say(id_barra.tiempo);
       FRAME;
   END
END

PROCESS barraVelocidad(int ini, int x, int y, int z)
BEGIN
   tiempo=0;
   LOOP
       tiempo++;
       FRAME;
   END
END
[/code]

Windgate

Si alguien tiene dudas (Cosa normal) le recomiendo leer el último tema de mi tutorial:

http://trinit.es/temario/Tema%2039%20PUBLIC.pdf

Último por ahora, este Verano ampliaré y mejoraré :P
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

Drumpi

sí, grisendo, si estoy en lo cierto (que parece que si :D) eso mismo vale.
Get_id sirve para obtener la id de un proceso si no lo has guardado en una variable. Se suele usar con type y el nombre (ojo, no es lo mismo nombre que crear un proceso, hay un () de diferencia) para que devuelva la ID de un proceso cualquiera que coincida con ese nombre.
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)

grisendo

I know, I know...  sólo que me había descolocau que lo utilizases aquí :D

Aunque parezca novato, soy de la vieja escuela de DIV (creo que era la versión 2 la primera que usé), donde los eructos eran pedos y los pedos son eructos, donde los procesos tenían todos ID impar... donde impar era TRUE y par era FALSE... menos mal que esas rarezas han cambiado :P Lo que pasa que con tanto lenguaje que utilizo a diario me lío a veces :P

¿Y como es que es tan peculiar el uso de PUBLIC? ¿Cómo es que no se utiliza de la misma forma que un PRIVATE?