Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: hokuto40 on December 14, 2022, 04:32:01 PM

Title: funciones y procesos privados
Post by: hokuto40 on December 14, 2022, 04:32:01 PM
Se pueden crear funciones y procesos privados de un archivo.
Es para separar el codigo de un proceso en diferentes funciones,pero quiero que esas funciones sean privadas de ese archivo y no se puede acceder a ellas desde fuera,solo desde el proceso de ese mismo archivo.

Es para tener el codigo dividido en diferentes partes,algo como los metodos de una clase.
Title: Re:funciones y procesos privados
Post by: panreyes on December 14, 2022, 05:04:11 PM
Estás pidiendo "namespaces" entonces, ¿cierto?

Hasta donde sé, todo el código incluido es global. Para proyectos complejos no ayuda mucho.

En el caso de eXplosive Dinosaurs lo resolví añadiendo un prefijo a todas las funciones, procesos y variables globales de cada minijuego.
Por ejemplo: masteroids_, mrobotcombat_, etc...

Otra posibilidad sería preparar una tool precompiladora: añades una linea como ésta
#namespace prefijo_

Y luego con la tool precompiladora:
- Copias todo el código a una carpeta temporal.
- De cada archivo de código, si hay prefijo:
+- Lees el nombre del namespace.
+- Eliminas la línea del namespace del código.
+- Averiguas los nombres de todos los PROCESS y FUNCTION
+- Añades el prefijo a todas las declaraciones de PROCESS y FUNCTION, y llamadas, del código de dicho archivo.

- Después compilas del código de dicha carpeta temporal.

Es algo de faena, pero no sería muy complicado supongo :)
Title: Re:funciones y procesos privados
Post by: hokuto40 on December 14, 2022, 08:58:42 PM
Namespace no.
En lua si quieres que una funcion o variable sea privada de ese archivo con poner "local" delante esta hecho,creo que en c se usa la palabra "static" para que la funcion sea privada de ese archivo.

Pero tampoco veo problema solo tendria que poner un nombre dejando claro que es para ese proceso,por ejemplo:

Si el proceso se llama nave pues la funcion o metodo seria naver_mover(),aunque no hubiera estado mal que tuviera algo de esto bennugd,tal vez se podria añadir a bennugd 2.
Title: Re:funciones y procesos privados
Post by: SplinterGU on December 25, 2022, 07:49:46 PM
si, aunque no exactamente de esa forma, pero podes hacerlo con etiquetas, goto, gosub, call y return
Title: Re:funciones y procesos privados
Post by: hokuto40 on December 25, 2022, 09:19:12 PM
Quote from: SplinterGU on December 25, 2022, 07:49:46 PM
si, aunque no exactamente de esa forma, pero podes hacerlo con etiquetas, goto, gosub, call y return

Me puedes poner un ejemplo de eso que comentas,nunca he usado etiquetas.
Title: Re:funciones y procesos privados
Post by: hokuto40 on January 04, 2023, 04:44:16 PM
He buscado en el foro lo que comentaba SplinterGU de usar goto, gosub, call y return.Pero no encuetro nada que lo explique detalladamente para usarlo como sustituto a la falta de metodos,tampoco hay nada en el manual.

Si alguien me dice donde encontrar informacion detallada de esto con algun ejemplo.
Title: Re:funciones y procesos privados
Post by: SplinterGU on January 30, 2023, 03:25:08 PM
Quote from: hokuto40 on January 04, 2023, 04:44:16 PM
He buscado en el foro lo que comentaba SplinterGU de usar goto, gosub, call y return.Pero no encuetro nada que lo explique detalladamente para usarlo como sustituto a la falta de metodos,tampoco hay nada en el manual.

Si alguien me dice donde encontrar informacion detallada de esto con algun ejemplo.

perdon la demora... ya te busco...

aca:

http://forum.bennugd.org/index.php/topic,4211.0.html
Title: Re:funciones y procesos privados
Post by: hokuto40 on January 31, 2023, 08:09:14 PM
Ya estuve probando cosas aunque no se si estan bien,te lo muestro para que me digas si esta bien o hay algo a cambiar o hay mas cosas a usar.


import "mod_text"; //write
import "mod_video"; //setmode,setfps
import "mod_key"; //key
import "mod_proc"; //exit
import "mod_map"; //load fpg,load fnt

global
int graficos = 0,fuente = 0;
end

process main()
begin
set_mode(640,480,32);
set_fps(60,1);
graficos = load_fpg("graficos.fpg");
fuente = load_fnt("fuente.fnt");
Jugador();
loop
if(key(_esc))
exit("terminado");
end
frame;
end
end

//proceso jugador----------------------------
process Jugador()
private
int velocidad = 5;
end
begin
file = graficos;
graph = 1;
x = 320;
y = 400;
write_var(fuente,320,32,ALIGN_CENTER,velocidad);
loop
call mover_horizontal; //llamar etiqueta
call mover_vertical; //sustituye a funciones
frame;
end
//etiqueta
mover_horizontal:
if(key(_left))
x -= velocidad;
elseif(key(_right))
x += velocidad;
end
return; //salir de etiqueta,obligatorio

mover_vertical:
if(key(_up))
y -= velocidad;
elseif(key(_down))
y += velocidad;
end
return; //esto es para que funcione bien

end //fin proceso jugador-----------------------
Title: Re: funciones y procesos privados
Post by: SplinterGU on February 27, 2023, 06:11:01 AM
lo veo perfecto! perdon por la demora, pero no recibi notificacion de esto...
Title: Re: funciones y procesos privados
Post by: hokuto40 on March 03, 2023, 07:40:29 PM
Ok.