Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Milton884 on May 03, 2011, 12:59:09 AM

Title: Problema con public
Post by: Milton884 on May 03, 2011, 12:59:09 AM
Lei todos los topics, y el tutorial de Zaragoza de Public, pero en este codigo cuando intento ejecutar me dice que en la linea 44 hay un error: Unknown Identifier("DISPARANDO"). Y esta todo bien declarado la variable publica... dejo el codigo para que lo vean:
(es un tipico Matamarcianos el codigo, no terminado igualmente):

[code language="bennu"]PROGRAM matamarcianos;
   INCLUDE "DLL\import.prg";
   
GLOBAL
   int fpgGraficos;
   int posiciones[4]=(30,200,400,600,700);
   
PROCESS Main();
   private
      int i;
BEGIN
   set_mode(800,600,32,MODE_WINDOW);
   set_fps(50,0);
   rand_seed(time());
   fpgGraficos=load_fpg("FPG\Graficos.fpg");
   put_screen(fpgGraficos,4); //fondo
   nave();
   for(i=0;i<3;i++)
      marciano();
   end
END


PROCESS Disparo();
   private
      nave prota;
   BEGIN
      prota=get_id(type nave);
      graph=3;
      x=father.x;
      y=father.y;
      
      LOOP
         if(prota.disparando==1) //<--ACA ME TIRA ERROR
            y=y-10;
         end
         
         if(y<=0)
            prota.disparando=0;
            break; //destruimos el proceso de la memoria y de la pantalla.
         end
         
         frame;
      END
   END

PROCESS Marciano();

private
   int direccion; //1 hacia izq/ 2 hacia derecha
BEGIN
   file=fpgGraficos;
   graph=2;
   x=posiciones[rand(0,4)];
   y=50;
   direccion=2;
   
   LOOP
   
      
      if(direccion==2)
         x=x+4;
         if(x>=800)
            x=800;
            direccion=1;
         end
      else
         //si direccion es 1 (izquierda)
         x=x-4;
         if(x<=0)
            x=0;
            direccion=2;
         end
      end
      frame;
   END
END
   
   
PROCESS Nave();
   public
      int disparando;
      
      BEGIN
      //file=fpgGraficos;
      graph=1;
      
      x=200;
      y=550;
      
      
      LOOP
         if(key(_right))
            x=x+3;
         end
         
         if(key(_left))
            x=x-3;
         end
         
         if(key(_space))
            if(not(disparando))
               disparo();
               disparando=true;
            end
         end
         
         frame;
      END
   END[/code]


Title: Re: Problema con public
Post by: SplinterGU on May 03, 2011, 02:43:52 AM
escribe el proceso nave antes de el proceso que quiere acceder a la variable publica.
Title: Re: Problema con public
Post by: Drumpi on May 03, 2011, 11:12:47 AM
O usa DECLARE con el nombre de la función, sus parámetros y la definición de sus variables públicas, antes del proceso que usa dicha variable. Es como la declaración de funciones de C, sólo que algo más completa.
Title: Re: Problema con public
Post by: Milton884 on May 03, 2011, 12:18:47 PM
Quote from: SplinterGU on May 03, 2011, 02:43:52 AM
escribe el proceso nave antes de el proceso que quiere acceder a la variable publica.

Si era eso. El orden de los procesos =) gracias.

De paso aprovecho para preguntar, como hacer para sin saber que procesos es el padre, tomarlo en la variable padre y usar sus propiedades publicas...

Yo hice esto, pero me tira un error: Undefinded procedure: FATHER.

PROCESS Disparo();

   BEGIN
      padre=type(get_id(father)); //sin saber que procesos es el padre, tomarlo en la variable padre y usar sus propiedades publicas...

                           ....
Title: Re: Problema con public
Post by: Drumpi on May 03, 2011, 12:50:35 PM
FATHER es una variable local prefedinida, almacena la ID del padre, para poder acceder a sus variables LOCALES (tales como FATHER.X, FATHER.GRAPH, FATHER.ALPHA y otras que definas tu).
Si quieres acceder a sus variables públicas, creo que tendrías que hacer lo siguiente:
1- crear una variable nueva, cuyo tipo sea el nombre del proceso padre.
2- Asignarle el valor de la variable FATHER.
3- Usar la nueva variable del mismo modo que usarías la variable FATHER para acceder a sus datos.

Ejemplo:

[code language="bennu"]
declare process padre ()
    public
        int mi_variable
end

(...)

process padre ()
begin
    (...)
    hijo();
    (...)
end

process hijo()
private
    padre su_id;
begin
    su_id=father;
    say(su_id.mi_variable);
    (...)
end
[/code]

Si no me he equivocado, más o menos eso debe ser.
Title: Re: Problema con public
Post by: Milton884 on May 03, 2011, 12:55:16 PM
Gracias! Ahora lo pruebo bien y te digo. Desde ya gracias.
Title: Re: Problema con public
Post by: Futu-block on May 03, 2011, 09:29:42 PM
eso de say de que vá?, que lo he visto en algunos sitios...
Title: Re: Problema con public
Post by: Rein (K´)ah Al-Ghul on May 03, 2011, 09:57:28 PM
Quote from: Futublock on May 03, 2011, 09:29:42 PM
eso de say de que vá?, que lo he visto en algunos sitios...
son salidas a consola, para visualizar informacion por ejemplo
Title: Re: Problema con public
Post by: Drumpi on May 03, 2011, 11:42:13 PM
Envía una cadena de texto a la consola de comandos que la llamó, o en su defecto, al stdout.txt.
Viene de miedo para depurar, porque puedes ver en tiempo real lo que valen las variables sin tener que recurrir a write_loquesea (que también es recomendable).
Sobre todo es muy útil cuando el programa se cierra de golpe: te permite saber a qué partes del código se llega y te dice lo que valen las variables sin esperar a llegar al frame. Menos vistoso que la consola de depuración pero mucho más útil.
Title: Re: Problema con public
Post by: Futu-block on May 04, 2011, 07:46:43 AM
aah migo, poco util lo veo por ahora...
tiempo al tiempo, je je