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]
escribe el proceso nave antes de el proceso que quiere acceder a la variable publica.
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.
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...
....
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.
Gracias! Ahora lo pruebo bien y te digo. Desde ya gracias.
eso de say de que vá?, que lo he visto en algunos sitios...
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
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.
aah migo, poco util lo veo por ahora...
tiempo al tiempo, je je