Estructura de programación blitz3d
Buenas tardes.
Estoy realizando un videojuego en Blitz3D y al principio empecé a programarlo todo dentro de la misma función y así me funcionaba perfectamente. El problema está cuando el código se va alargando y complicando y necesito dividirlo en funciones diferentes como el personaje, el escenario, el enemigo, para poder hacer llamada a cada una independientemente y así poder ir multiplicando el número de enemigos, etc.
Primero creo las funciones con su código ordenadamente y me aparecen dentro de la lista de funciones que he creado, pero al hacer llamada a todas ellas desde una principal solo se ve en pantalla la primera de todas ellas. Supongo que porque no se estructurar el código bien y no sé dónde colocar Renderworld, Updateworld y Flip.
¿Todas las funciones deben llevar esos tres procesos o solo una principal? ¿Cómo hago llamada a las funciones para qué aparezcan todas?
Lo estoy haciendo así:
Graphics3D 1024,600,32,1
SetBuffer BackBuffer() ;
Función1() Función2()
End.
Function Función1()
Mundo1=LoadMesh(.)
Textura1=LoadTexture(.) EntityTexture Mundo1,Textura1
PositionEntity Mundo1,0,0,0
Camara=CreateCamera()
PositionEntity Camara,0,0,0
While Not KeyDown(1)
UpdateWorld
RenderWorld
Flip
Wend
End
End Function.
Function Función2()
Personaje=LoadMesh(.)
Textura2=LoadTexture(.)
EntityTexture Personaje,Textura2
PositionEntity Personaje,0,0,0
While Not KeyDown(1)
UpdateWorld
RenderWorld
Flip
Wend
End
End Function.
Solo me aparece la primera función y nada más. Un saludo.
Estructura de programación blitz3d
¿En serio nadie sabe qué es lo que estoy haciendo mal? Llevo toda la tarde intentando solucionar el problema para seguir avanzando y no lo consigo, me he quedado estancado.
He estado haciendo pruebas y es como si al crear una función y finalizarla Blitz3D entendiese que termina el programa ahí y no sigue leyendo si hay nada más, ni ejecuta más procesos ni nada, pero no sé porque.
Estructura de programación blitz3d
Buenas no tengo ni idea de Blitz, pero mirando el código tiene parecido a Python, si en Python llamas a las funciones como tu lo haces en:
Graphics3D 1024,600,32,1
SetBuffer BackBuffer() ;
Función1() Función2()
End.
Funciones Funcion1() Funcion2(), Python solo leería la primera, para qué lea las dos debes de llamarlas cada una en una línea:
Graphics3D 1024,600,32,1
SetBuffer BackBuffer() ;
Función1()
Función2()
End
Esto sería en Python, pero por probar no pierdes nada ya qué nadie dice nada al respecto. Un saludo.
Estructura de programación blitz3d
Cita:
Iniciado por
Jhonatan00_00
¿En serio nadie sabe que es lo que estoy haciendo mal? Llevo toda la tarde intentando solucionar el problema para seguir avanzando y no lo consigo, me he quedado estancado.
He estado haciendo pruebas y es como si al crear una función y finalizarla Blitz3D entendiese que termina el programa ahí y no sigue leyendo si hay nada más, ni ejecuta más procesos ni nada, pero no sé por qué.
Llámame pesado, pero preguntar algo en un foro que no es específico de Blitz3D, varios años después del bom(que nunca fue tal) del programa, pues yo no esperaría respuestas. Éste es uno de los problemas que te comenté: puedes aprender de lo que ya hay escrito, pero en el momento en que te encuentres con un problema para él que no encuentres respuesta.
Estructura de programación blitz3d
Buenos días. Muchas gracias por responder Juani. En realidad, llamo a las dos funciones una en cada línea, solo que al escribir el código de muestra para que lo vierais lo he amontonado así sin darme cuenta. He hecho llamada a las funciones en la misma línea por curiosidad para ver qué hace Blitz3D y me dice Expecting expression, así que, veo que en eso tanto Python como Blitz3D son iguales y hay que hacer llamada a las funciones en líneas diferentes. Solo ha sido un error al poner el ejemplo, pero no lo hacía así en el programa original.
Ayer noche descubrí cual era el problema y es que estoy muy familiarizado a programar en Div2, un engine con el que hacía videojuegos hace muchos años y que usaba el lenguaje C, desde el cual yo hacía llamada a las funciones como lo muestro en el ejemplo y funcionaba, pero Blitz3D no es exactamente igual. Voy a explicar cuál es su estructura de programación:
- Iniciamos el programa indicando un nombre, la resolución de pantalla y muy importante, creando las variables globales que vamos a controlar después desde la función principal, ejemplo: global cámara, global posición x.
- Creamos una función principal desde la cual haremos llamada a todas las demás y la única qué va a contener en su código un bucle repetitivo porque Blitz3D entiende que el programa es ese bucle repetitivo y que vas a meter todo ahí y hasta qué no termina ese bucle no sigue haciendo nada más. Dentro de este bucle es donde meteremos Updateworld, Renderworld, wend y flip, para qué el programa actualice, renderice y muestre todo el mundo y por eso creamos las variables globales, para poder controlarlas dentro de este bucle principal sin haber creado la entidad desde el si no desde las funciones secundarias.
- Creamos el resto de funciones las cuales serán secundarias y que servirán más que para otra cosa, para cargar imágenes, modelos, animaciones, dar valores, crear luces, entidades de cualquier tipo o dar colocación a los objetos en el espacio, pero que no tendrán bucles repetitivos, tan solo valores fijos que serán controlados desde la función principal por medio de variables globales.
- Se pueden crear tantas funciones principales como queramos, pero debemos poner condiciones para cerrar una y llamar a la siguiente que a su vez hará llamada a todas sus funciones secundarias. No podremos tener en ejecución dos funciones principales con sus bucles repetitivos porque solo ejecutará la primera de ellas como me pasaba a mí.
IkerClon ya estoy sufriendo las consecuencias de usar un engine que lleva tiempo casi sin uso y por eso me estoy retrasando bastante más, porque tengo que encontrar las soluciones por mi mismo y no puedo entrar a Google y encontrar la solución, una |@#~euros, pero es que, programo desde un netbok con Windows XP y Unity no es compatible con Windows XP, así que, es lo que hay y tengo que desarrollarlo en Blitz3D, que también es verdad que, aunque sea más complicado a la larga cuando lo dominas es más gratificante y lo puedes hacer todo en el exactamente igual que en el mejor engine, solo que ha base de programación pura y dura y tienes que saber. Un saludo.