Ver la versión completa : [Ayuda] ¡¡¡¡¡¡¡¡¡¡Ainss con el pooto Evil-Fenix!!!!!!!!!!!
Rivroner
23/10/2009, 16:56
Jaja, pues eso, hasta los mismísimos. [wei]
Ahora no consigo que mi personaje se quede por delante de un parallax que he metido en pantalla al fin, ya he probado de todo y nada. :confused:
Sé que la Z va de 512 (lo más lejos y al fondo del escenario) hasta -512 lo más cercano al espectador.Pues nada oiga. :quepalmo:
¿Consejos, preguntas? :loco:
Se me ocurren un par de cosas.. tienes algo de codigo para darnos?
El sprite que "se queda atras" ves realmente que se ha quedado atrás (a traves de alguna transparencia) o simplemente no lo ves y crees que està atras?
Puede que sea un mal uso del ctype?
Rivroner
23/10/2009, 17:07
Si que lo veo sí. :D
Le paso el parámetro de la Z, que antes no lo tenía pero viendo que probando a llamar los procesos en cierto orden para que se me pongan en pantalla en cierto orden no funcionaba (Si no se especifica lo contrario, los procesos se ordenan en profundidad en función de su momento de creación (procesos posteriores, Z más cercana).) he decidido añadirle la z y nada, no hay forma. :(
puedes alterar el orden de ejecucion de procesos utilizando priority (http://wiki.bennugd.org/index.php?title=Priority)
Rivroner
23/10/2009, 17:14
Gracias Jurk pero paso de meterme en más berenjenales y no sé si eso me serviría.
Segata Sanshiro
23/10/2009, 17:25
¿Cómo funciona ese parallax? Está hecho entero por procesos, o usando la función start_scroll, o de qué forma? Pueden ser mil cosas, dependiendo de cómo hayas hecho lo que has hecho :D (que no queda muy claro).
puedes alterar el orden de ejecucion de procesos utilizando priority (http://wiki.bennugd.org/index.php?title=Priority)
no deberias usar un tema de prioridades para resolver un tema de visibilidad.
de hecho raro es el caso que sea necesario y/o recomendable cambiar las prioridades.
Aiken
Rivroner
23/10/2009, 17:28
¿Cómo funciona ese parallax? Está hecho entero por procesos, o usando la función start_scroll, o de qué forma? Pueden ser mil cosas, dependiendo de cómo hayas hecho lo que has hecho :D (que no queda muy claro).
Pues es una chapuza que te cagas, pero furula. :D
Sólo uso un start_scroll.
Extracto del código:
scroll.region1=define_region(1,96,100,1,1);
start_scroll(0,1,001,998,0,4);
lava(950,000,094,510);
alambrada(12,000,170); // Alambrada de espino1
jack(8,0,500);
//Procesos//
Process alambrada(graph,xrelativa,yrelativa);
Begin
file=1;
Loop
y=360-scroll.y0*2;
x=xrelativa-scroll.x0/2;
y=(yrelativa-scroll.y0)*2; // Halla la posicion relativa al scroll
Frame;
End
End
Process lava(graph,xrelativa,yrelativa,z);
Begin
file=1;
Loop
z=510;
y=yrelativa-scroll.y0/2;
x=xrelativa-scroll.x0/6; // Halla la posicion relativa al scroll
Frame;
End
End
Process jack(x,y,z);
Private
incx=0; // Variable para comprobar paredes
ultima_y=0; // Variable para mirar si sube
ultima_veloc=0; // Variable para comprobar paredes
id2; // Identificador de uso general
Begin
ctype=c_scroll; // Mete dentro del scroll
scroll.camera=id; // Hace que le siga la c*mara
graph=100;
priority=1;
z=500;
.........................
end
La alambrada se ve por delante de la lava y del personaje como quiero, o sea que supongo que las z que asigno a jack y a lava no sirven de nada.
¿Dónde debería ponerla?
¿El proceso alambrada en que z está por defecto? O_o
No entiendo eso de asignarle dos valores distintos a la Y en el proceso alambrada, pero bueno.
Por defecto, todos los procesos tienen z=0. Si no recuerdo mal:
z=512 -> fondo de la pantalla.
z=256 -> scrolls y modo7
z=0 ----> procesos
z=-256 -> raton
z=-512 -> textos
Pero ojo, los límites de Z no son [-512,512], Z es un INT y admite todos los valores que admiten los INT (2^32 valores posibles entre positivos y negativos, haced las cuentas que a mi me da la risa).
< - >
PD: tambien le has puesto a Jack una z de 500, por lo que lo has enviado casi al fondo del todo: recuerda que cuanto más negativo más por encima se ve.
Rivroner
23/10/2009, 18:14
Ya he dicho que era una chapuza, pero furula. :D
Pero le asigno (suponiendo que esté bien asignado 510 a lava, o sea que jack se debería ver por delante de lava, osea tapándola ¿no?
Pues si, debería.
No se, el error estaría por otro lado. Puedes probar a compilar en PC con el parámetro -g, y cuando ejecutes el programa pulsas alt+c, te saldrá la consola de depuración. Si escribes instances te saldrá la lista de procesos, escribes lava.z (o sustituye lava por el ID del proceso, sale en la misma lista) y luego jack.z y mira si los valores son correctos.
A mi me pasa algo similar con el motor de tiles, pongo las Z adecuadamente (y además que se ve) y aun así se ordenan mal. La única solución es pasar a Bennu, porque ahi si que va bien (o prueba con Fenix en lugar de UFenix).
Rivroner
23/10/2009, 19:34
Pues si te pasa a ti que eres un maquinón va a ser culpa de eso, probaría en Bennu pero es que no tengo ni guarra de como compilar para BennuGD ni eso de meterle los include ni ostias. :D
A la noche me empollo lo de Bennu, creo que va a ser eso la solución.
EDITO:Bufff, me da muchos fallos en Bennu y no del program sino de cosas del código que no soporta Bennu del Fenix. :(
Me da errores en los import y librerias, 5 variable redeclared pero no me dice en que línea de mi programa está, y aparte en esta línea :
If ((key(_right) OR joy.right) AND velocidad<2)
Dice que joy es un unknown identifier.
¿Qué pongo ahí en BennuGD?
Segata Sanshiro
24/10/2009, 00:35
EDITO:Bufff, me da muchos fallos en Bennu y no del program sino de cosas del código que no soporta Bennu del Fenix. :(
Me da errores en los import y librerias, 5 variable redeclared pero no me dice en que línea de mi programa está, y aparte en esta línea :
If ((key(_right) OR joy.right) AND velocidad<2)
Dice que joy es un unknown identifier.
¿Qué pongo ahí en BennuGD?
Eso es solucionable, lo de "variable redeclared" es un "warning", no un "error", así que no pasa nada. Para lo otro, tienes que meter los imports necesarios (import "mod_joy" por ejemplo). ¿Lo de "joy.right" te funciona en Fenix? En Bennu creo que cambió el tema de los controles, es un pelín distinto.
Rivroner
24/10/2009, 00:43
Ese lo tengo importado.
En Fenix me va en el PC y en la Wiz, pero claro, en el PC no he probado con Joystick, sólo con teclas, y ya no sé si en Wiz pilla el pad como teclas, ni idea.
Segata Sanshiro
24/10/2009, 01:00
Ese lo tengo importado.
En Fenix me va en el PC y en la Wiz, pero claro, en el PC no he probado con Joystick, sólo con teclas, y ya no sé si en Wiz pilla el pad como teclas, ni idea.
Aaah, pues entonces es por eso. Definitivamente es distinto en Bennu, por eso te da el error de que no te reconoce lo de joy.left. En Bennu se puede hacer así (te digo el método que usa el juego de ejemplo bgd-pacman): primero obtienes el número de joysticks conectados con num_joy = joy_number(); (num_joy es una variable int cualquiera que debes haber declarado antes). num_joy será 0 en PC y 1 en Wiz. Es importante conocer el número de joysticks conectados ya que si estás en PC (donde no hay ningún joystick) y usas las funciones de comprobación del joystick, no funcionarán correctamente.
Además, para facilitar el trabajo, declaras estas constantes:
// Tomado de bgd-pacman
#define WIZ_UP 0
#define WIZ_UP_LEFT 1
#define WIZ_LEFT 2
#define WIZ_DOWN_LEFT 3
#define WIZ_DOWN 4
#define WIZ_DOWN_RIGHT 5
#define WIZ_RIGHT 6
#define WIZ_UP_RIGHT 7
#define WIZ_MENU 8
#define WIZ_SELECT 9
#define WIZ_L_BUTTON 10
#define WIZ_R_BUTTON 11
#define WIZ_A 12
#define WIZ_B 13
#define WIZ_X 14
#define WIZ_Y 15
#define WIZ_VOL_UP 16
#define WIZ_VOL_DOWN 17
Y ahora, para comprobar la pulsación de una tecla, y que funcione el mismo código tanto en PC como en Wiz, debes hacer, por ejemplo:
if( key(_up) || (num_joy && joy_getbutton(0,WIZ_UP)) );
// ...
end
Rivroner
24/10/2009, 01:19
He conseguido que me funcione sin usar lo tuyo y luego usándolo quitando el numjoy pero se me queda pilaldo el juego en la pantalla de presentación del nivel 1 y claro, en el Bennu este no sé donde mirar que error es.
Sí como grabar los errores del bgdc al compilar pero los de bgdi al lanzar el dcb no los puedo ver.
GameMaster
24/10/2009, 14:10
No necesitas un if de 2 condiciones cuando llames un botón de Wiz...
Si quieres te envio por PM una función creada por mi más simplificada, donde sólo tienes que poner por ejemplo if(Wiz_Boton_A) tiro();end
No necesitas un if de 2 condiciones cuando llames un botón de Wiz...
Si quieres te envio por PM una función creada por mi más simplificada, donde sólo tienes que poner por ejemplo if(Wiz_Boton_A) tiro();end
Tambien puedes postearla por aquí... que hay muchos interesados :brindis:
GameMaster
24/10/2009, 15:18
Aqui os lo dejo, cambiar las variables que tengo en portugues a español si quereis (para no tener que cambiarlo yo ;)):
En Global:
GLOBAL
SetaCima;
Wiz_SetaCima;
SetaBaixo;
Wiz_SetaBaixo;
SetaEsquerda;
Wiz_SetaEsquerda;
SetaDireita;
Wiz_SetaDireita;
SetaCimaEsquerda;
Wiz_SetaCimaEsquerda;
SetaCimaDireita;
Wiz_SetaCimaDireita;
SetaBaixoEsquerda;
Wiz_SetaBaixoEsquerda;
SetaBaixoDireita;
Wiz_SetaBaixoDireita;
Botao_A;
Wiz_Botao_A;
Botao_B;
Wiz_Botao_B;
Botao_X;
Wiz_Botao_X;
Botao_Y;
Wiz_Botao_Y;
Botao_L;
Wiz_Botao_L;
Botao_R;
Wiz_Botao_R;
Botao_Select;
Wiz_Botao_Select;
Botao_Menu;
Wiz_Botao_Menu;
Volume_Menos;
Wiz_Volume_Menos;
Volume_Mais;
Wiz_Volume_Mais;
la funcion:
PROCESS controls()
BEGIN
LOOP
#define WIZ_UP 0
#define WIZ_UP_LEFT 1
#define WIZ_LEFT 2
#define WIZ_DOWN_LEFT 3
#define WIZ_DOWN 4
#define WIZ_DOWN_RIGHT 5
#define WIZ_RIGHT 6
#define WIZ_UP_RIGHT 7
#define WIZ_MENU 8
#define WIZ_SELECT 9
#define WIZ_L_BUTTON 10
#define WIZ_R_BUTTON 11
#define WIZ_A 12
#define WIZ_B 13
#define WIZ_X 14
#define WIZ_Y 15
#define WIZ_VOL_UP 16
#define WIZ_VOL_DOWN 17
IF (joy_number())
SetaCima = joy_getbutton(0, WIZ_UP);
Wiz_SetaCima = SetaCima && (SetaCima != -1);
SetaBaixo = joy_getbutton(0, WIZ_DOWN);
Wiz_SetaBaixo = SetaBaixo && (SetaBaixo != -1);
SetaEsquerda = joy_getbutton(0, WIZ_LEFT);
Wiz_SetaEsquerda = SetaEsquerda && (SetaEsquerda != -1);
SetaDireita = joy_getbutton(0, WIZ_RIGHT);
Wiz_SetaDireita = SetaDireita && (SetaDireita != -1);
SetaCimaEsquerda = joy_getbutton(0, WIZ_UP_LEFT);
Wiz_SetaCimaEsquerda = SetaCimaEsquerda && (SetaCimaEsquerda != 1);
SetaCimaDireita = joy_getbutton(0, WIZ_UP_RIGHT);
Wiz_SetaCimaDireita = SetaCimaDireita && (SetaCimaDireita != -1);
SetaBaixoEsquerda = joy_getbutton(0, WIZ_DOWN_LEFT);
Wiz_SetaBaixoEsquerda = SetaBaixoEsquerda && (SetaBaixoEsquerda != -1);
SetaBaixoDireita = joy_getbutton(0, WIZ_DOWN_RIGHT);
Wiz_SetaBaixoDireita = SetaBaixoDireita && (SetaBaixoDireita != -1);
Botao_A = joy_getbutton(0, WIZ_A);
Wiz_Botao_A = Botao_A && (Botao_A != -1);
Botao_B = joy_getbutton(0, WIZ_B);
Wiz_Botao_B = Botao_B && (Botao_B != -1);
Botao_X = joy_getbutton(0, WIZ_X);
Wiz_Botao_X = Botao_X && (Botao_X != -1);
Botao_Y = joy_getbutton(0, WIZ_Y);
Wiz_Botao_Y = Botao_Y && (Botao_Y != -1);
Botao_L = joy_getbutton(0, WIZ_L_BUTTON);
Wiz_Botao_L = Botao_L && (Botao_L != -1);
Botao_R = joy_getbutton(0, WIZ_R_BUTTON);
Wiz_Botao_R = Botao_R && (Botao_R != -1);
Volume_Menos = joy_getbutton(0, WIZ_VOL_DOWN);
Wiz_Volume_Menos = Volume_Menos && (Volume_Menos != -1);
Volume_Mais = joy_getbutton(0, WIZ_VOL_UP);
Wiz_Volume_Mais = Volume_Mais && (Volume_Mais != -1);
Botao_Select = joy_getbutton(0, WIZ_SELECT);
Wiz_Botao_Select = Botao_Select && (Botao_Select != -1);
Botao_Menu = joy_getbutton(0, WIZ_MENU);
Wiz_Botao_Menu = Botao_Menu && (Botao_Menu != -1);
END
FRAME;
END
END
Ahora sólo la teneis que llamar cuando la utilizeis (dentro de los procedimientos, al principio de ellos claro, donde useis los botones de la Wiz). Como nota, deciros que funciona de maravilla y no guarda pulsaciones entre pantallas (error comun al utilizar botones de Wiz):
signal(type controls, s_kill); controls();
< - >
Faltaba un ejemplo, para salir por ejemplo con ESC si jugado en el ordenador, o con L+R si jugado en la Wiz:
IF ((Wiz_Botao_L AND Wiz_Botao_R) OR key(_esc))
exit ("Adiós! bennuseros...", 0);
END
Rivroner
24/10/2009, 17:44
Muchas gracias GameMaster, ya se lo he metido a mi código de Bennu porque me ha gustado mucho pero en Bennu el juego me sigue sin funcionar y no sé como encontrar el problema, ¿dónde puedo mirar los errores cuando lanzo el bgdi y se queda colgado?
Sé como mirar los de compilar el prg pero los de lanzar el dcb no.
Y bueno, al compilar el prg me sigue dando 5 warnings que no sé como quitarlos:
librender:4:warning:variable redeclared ("ALPHA_STEPS)
bgdc.import:13:warning:variable redeclared ("CTYPE)
bgdc.import:13:warning:variable redeclared ("CNUMBER)
libscroll:24:warning:variable redeclared ("CTYPE)
libscroll:24:warning:variable redeclared ("CNUMBER)
¿Hay alguna lista de funciones que existen en Bennu y que si lo hacen en Fenix?
¿Gracias a todos de verdad?
Verás, te cuento: lo de los warnings no los vas a poder quitar nunca, porque eso es cosa de los módulos. En ocasiones dos módulos hacen uso de una misma variable global que en Fenix estaba predefinida, pero aqui cada módulo debe declararla por si misma. No te va a dar ningún problema por eso, símplemente te advierte que si usas funciones de dos módulos distintos van a escribir sobre la misma variable, y no en dos separadas como el compilador se esperaba.
Respecto al error, pues yo uso para compilar y ejecutar el siguiente script:
#!/bin/sh
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../bgd-runtime
PATH=$PATH:../bgd-runtime
export LD_LIBRARY_PATH
export PATH
echo 2 > /proc/cpu/alignment
for prg in *.prg; do
name=`basename $prg .prg`
bgdc $prg >log1.txt 2>err1.txt
bgdi $name >log2.txt 2>err2.txt
done
cd /usr/gp2x
exec /usr/gp2x/gp2xmenu
Más o menos ya ves lo que quiero decir: puedes obtener la salida y los errores tanto al compilar como al ejecutar.
Aparte de eso, muy poquitas funciones han cambiado de Fenix a WIZ. Ya puse en otro hilo un fichero con todas las funciones clasificadas por módulos. Si quieres te lo vuelvo a pegar.
PD: lo del problema de las Z se me da tanto en GP2X como en PC, lo digo porque lo compruebes no vaya a ser cosa tuya ;)
Rivroner
24/10/2009, 18:13
Gracias Drumpi, probaré eso, sólo quiero que me vaya en Bennu, que se me cuelgo al intentar cargar el nivel 1, se queda ahí en pause, ni siquiera me saca del programa.
Quiero hacerlo funcionar en BennuGD para descartar que lo de las X sea problema de mi código, lo que es muy posible, pero así descarto.
Seguramente en Bennu me pase igual con las Z, pero quiero comprobar si es fallo del Fenix 0.92a.
¿Y cómo uso ese script en el cmd de Windows 7 :D?
Lo usaré en la Wiz directamente no pasa nada, pero me es más cómodo hacerlo en PC.
Gracias. :)
Ah, en windows es mucho más sencillo: abre una ventana de comandos, haces el bgdc y luego el bgdi, ahí deberían verse los errores y toda salida del programa. Es que si arrastras o usas un .bat el programa se cierra antes de que te de tiempo a mirar (si usas un .bat añade el comando pause como última linea).
GameMaster
24/10/2009, 18:41
Eso es de linux, o sea el contenido de tujuego.gpe en la Wiz.
Para compilar en Windows 7 me imagino que sigue como en otros windows:
@bgdc tujuego.prg
para ejecutar:
@bgdi tujuego.dcb
SplinterGU
24/10/2009, 18:59
Muchas gracias GameMaster, ya se lo he metido a mi código de Bennu porque me ha gustado mucho pero en Bennu el juego me sigue sin funcionar y no sé como encontrar el problema, ¿dónde puedo mirar los errores cuando lanzo el bgdi y se queda colgado?
Sé como mirar los de compilar el prg pero los de lanzar el dcb no.
Y bueno, al compilar el prg me sigue dando 5 warnings que no sé como quitarlos:
librender:4:warning:variable redeclared ("ALPHA_STEPS)
bgdc.import:13:warning:variable redeclared ("CTYPE)
bgdc.import:13:warning:variable redeclared ("CNUMBER)
libscroll:24:warning:variable redeclared ("CTYPE)
libscroll:24:warning:variable redeclared ("CNUMBER)
¿Hay alguna lista de funciones que existen en Bennu y que si lo hacen en Fenix?
¿Gracias a todos de verdad?
olvidate de eso... son warnings internos de los modulos, solo notificaciones para quienes crearon los modulos (yo)...
< - >
Aaah, pues entonces es por eso. Definitivamente es distinto en Bennu, por eso te da el error de que no te reconoce lo de joy.left. En Bennu se puede hacer así (te digo el método que usa el juego de ejemplo bgd-pacman): primero obtienes el número de joysticks conectados con num_joy = joy_number(); (num_joy es una variable int cualquiera que debes haber declarado antes). num_joy será 0 en PC y 1 en Wiz. Es importante conocer el número de joysticks conectados ya que si estás en PC (donde no hay ningún joystick) y usas las funciones de comprobación del joystick, no funcionarán correctamente.
Además, para facilitar el trabajo, declaras estas constantes:
// Tomado de bgd-pacman
#define WIZ_UP 0
#define WIZ_UP_LEFT 1
#define WIZ_LEFT 2
#define WIZ_DOWN_LEFT 3
#define WIZ_DOWN 4
#define WIZ_DOWN_RIGHT 5
#define WIZ_RIGHT 6
#define WIZ_UP_RIGHT 7
#define WIZ_MENU 8
#define WIZ_SELECT 9
#define WIZ_L_BUTTON 10
#define WIZ_R_BUTTON 11
#define WIZ_A 12
#define WIZ_B 13
#define WIZ_X 14
#define WIZ_Y 15
#define WIZ_VOL_UP 16
#define WIZ_VOL_DOWN 17
Y ahora, para comprobar la pulsación de una tecla, y que funcione el mismo código tanto en PC como en Wiz, debes hacer, por ejemplo:
if( key(_up) || (num_joy && joy_getbutton(0,WIZ_UP)) );
// ...
end
cuidado, en pc da 0, si no tenes joysticks conectados, si los tenes da 1 o la cantidad que tengas.
Rivroner
24/10/2009, 19:19
Ah, en windows es mucho más sencillo: abre una ventana de comandos, haces el bgdc y luego el bgdi, ahí deberían verse los errores y toda salida del programa. Es que si arrastras o usas un .bat el programa se cierra antes de que te de tiempo a mirar (si usas un .bat añade el comando pause como última linea).
Ya lo hago tío y nada, no sale nada, por eso peguntaba que como se hacía para que salieran los errores ejecutando el bgdi. :(
Parece como si no diera error pero el bennu interprete alguna instrucción de Fenix de forma diferente y me meta en algún bucle pausa infinita :D
GameMaster
24/10/2009, 20:03
Pero hombre, si abres el cmd, entras en la carpeta de tu juego, escribes
@bgdc tujuego.prg, si hay errores de compilación o warnings te lo dice sin que la ventana se cierre, y así puedes leerlos.
Si los errores son en ejecución del juego, es lógico que no los veas porque se cierra la ventana, pero si ejecutas el juego en la linea de comandos (cmd), al salir despues del juego por un error de crash por ejemplo, el error te sale impreso despues en el cmd.
Si lo que quieres es debuggear para buscar otro tipo de errores, como el que comentas (que no es un error pero si un comportamiento distinto al que quieres), tendras que habilitar el debugger al ejecutar el juego con el respectivo import (no me pergunte los nombres que no me recuerdo, tampoco lo hize nunca :))
animanegra
24/10/2009, 23:00
Oye, donde no te funciona el scroll?? en el pc o en la gp2x?? Te digo esto porque a mi me ha pasado con determinada version de compilador en pc y determinada en la gp2x eso que dices. Era cuando mezclaba no se cual era la del compilador. :S 0.92a o 0.93 con la ufxi.
Aparte en la gp2x los scroles, me refiero a multiples scroles, si estas haciendo un paralax entiendo que tienes mas de uno, para conseguir que hagan caso de cual va delante y cual no era un prueba y error. Al final creo que era usar los scroles de numero par o algo asi. :S y iniciarlos en el orden delante detras. De todas formas si estas probando en el ordenador no deberias tener ninguno de esos problemas.
Rivroner
25/10/2009, 00:21
No es nada de eso animanegra.
No me sale ningún error en el cmd al lanzar el dcb GameMaster, la ventana no se cierra, la sigo viendo.
Debe ser lo que digo de que lo que va en Fenix en Bennu no lanza error pero se queda bloqueado y no sé que puede ser por no poder ver cual es el error claro.
Estoy con la última beta de BennuGD, probaré con otro Bennu anterior a ver si es eso.
Segata Sanshiro
25/10/2009, 00:52
Por decir algo, ¿podrías comprobar que todos los bucles tienen un "frame" dentro? DIV te avisaba de bucles que se quedaban esperando durante mucho tiempo sin encontrar un frame, pero en Fenix/Bennu tienes que darte cuenta por ti mismo.
Rivroner
25/10/2009, 01:05
Ya, pero en Fenix me va.Tanto en PC como en Wiz. :D
Pero lo miro tranqui, asias. :)
EDITO:Nada, todos los bucles tienen su frame dentro.He mirado los LOOP, ¿debería mirar otro tipo de bucle además?
¿Nadie me puede decir si hay algún proceso o algo que no rule en Bennu y si lo hacía en Fenix? Alguno que ahora se llame de otra forma vamos.
Os pongo lo quey hay justo antes del Switch donde ya salta a los niveles del juego, no he puesto lo obvio:
Loop // Bucle principal
//play_song(music_menu,-1);
timer=1000; // Se inicializa fuera de tiempo para cambiar nada mas entrar
pantalla=3; // Elige la otra pantalla porque cambia nada mas entrar
Repeat // Bucle de pantallas de presentacion
let_me_alone();
If (timer>1000) // Si pasa 5 segundos cambia de pantalla
timer=0;
If (pantalla==1)
pantalla=3; // 3:Pantalla cr‚ditos
Else
pantalla=1;
End // 1:Pantalla de men£
fade_off();
put_screen(0,pantalla);
fade_on();
End
angle+=10000;
Frame;
If (key(_space)); exit(0); End;
Until (key(_enter));
// Espera a que se pulse una tecla
// Si has pulsado ESCAPE sal directamente del programa
If (key(_space));
fade_off();
exit("¡Gracias por jugar!",0);
frame(1000);
End
fade_off(); // Apaga pantalla
// Inicializa variables de juego
// Fase=1, vidas=3, puntuacion=0, bonus=0
nivel=1;
vidas=3;
puntos=0;
bonos=0;
Repeat // Bucle para pantalla de espera de carga
let_me_alone();
stop_scroll(0);
stop_scroll(1);
stop_scroll(2);
stop_scroll(3);
fade_on(); // Enciende la pantalla
put_screen(0,2);// Pinta pantalla de fondo
write(fuente2,138,77,4,"NIVEL");
write_int(fuente2,208,77,4,&nivel);
While (fading) // Espera mientras inicia todo, que
Frame(1000); // que ser* al acabar el apagado de pantalla
End
delete_text(all_text);
// Coloca marcadores de puntos, vidas y bonos
objeto(0,222,16,16,-512,0); // Pinta vidas
write(fuente1,36,16,4,"x");
write_int(fuente1,44,16,3,&vidas);
write_int(fuente1,160,16,4,&puntos); // Pinta puntuacion
objeto(0,216,270,17,-512,0); // Pinta bonos
write(fuente1,288,16,4,"x");
write_int(fuente1,296,16,3,&bonos); // Inicializa variable
fin_nivel=false; // controladora de fin de fase
A ver si fuera que alguna de esas instrucciones fuera nincompatible en BennuGD.
No, no, no hay nada incompatible (al menos yo no me lo he encontrado).
Si el programa se queda en ejecución infinita es que está esperando frame en algún lado, no sólo los loop: los while y los repeat tambien son susceptibles de "colgar" el programa si no se sale de ellos Y no hay frame dentro.
Para ver los errores, estos deberían salir en la ventana de comandos, o si no en stdout.txt o stderror.txt a las malas, y lo puedes comprobar añadiendo la mod_say al proyecto y escribiendo algo como:
say("Estoy en un programa que se cuelga");
al principio del proceso main.
Leyendo ese código que pones falta la condicion de salida del repeat del último párrafo, lo digo porque si quieres salir tras el primer bucle que has puesto debes pulsar enter y escape a la vez (con el if tan seguido no tendrías tiempo de reaccionar) o si no seguirá con el "apaga la pantalla" y con el "Bucle para pantalla de espera de carga".
Pero eso, si es algún bucle descontrolado no va a salir error.
Inténtalo un poco más, si no, sólo te puedo decir que me pases lo que tengas para que le eche un vistazo, aunque ahora ando bastante liado con la salida del nuevo motor.
Segata Sanshiro
25/10/2009, 01:38
edit: lol xDDD llego dos minutos tarde
A simple vista no veo nada raro... Algo útil para ver exactamente hasta dónde llega es ir metiendo say() en el código. Por ejemplo:
Loop // Bucle principal
say("Comenzando bucle principal");
//play_song(music_menu,-1);
timer=1000; // Se inicializa fuera de tiempo para cambiar nada mas entrar
pantalla=3; // Elige la otra pantalla porque cambia nada mas entrar
Repeat // Bucle de pantallas de presentacion
say("Bucle pantallas");
let_me_alone();
If (timer>1000) // Si pasa 5 segundos cambia de pantalla
say("Cambio pantalla");
timer=0;
If (pantalla==1)
pantalla=3; // 3:Pantalla cr‚ditos
Else
pantalla=1;
End // 1:Pantalla de men£
say("Comenzando fade_off");
fade_off();
Y así. Ejecútalo en el PC (verás los "say" salir por la línea de comandos según vaya llegando el programa a ellos) o bien en Wiz (con el script que pone Drumpi, los "say" irán guardándose en uno de los archivos de texto que se generan).
GameMaster
25/10/2009, 02:07
Una cosa es que sea compatible, otra es que tenga el mismo comportamiento.
Drumpi ya comente en el foro de Bennu varias cosas que difieren en comportamiento, como por ejemplo los fade_off, fade_on, incluso un hilo para ir apuntando diferencias...
Ya he luchado tanto por recolectar las diferencias que voy apuntando en los ports de Fenix a Bennu, y parece que sirven de poco...
Y ojo, estas diferencias ocurren sobretodo porque Bennu ha corregido muchas cosas que estaban mal definidas internamente en Fenix e incluso DIV.
Sobre tu ejemplo, mirandolo así rapidito y con sueño, parece que estas repitiendo un let_me_alone en un bucle...
No se si será el origen del problema, pero metelo antes del loop que es donde debe estar, al principio.
Otra cosa comenta los fades, a ver que no sea por el fade_off, ya que los fades difieren en comportamiento, y tienen que tener el while(fading)frame;end en Bennu sino no funcionan (en Fenix o Div no es necesario).
Segata Sanshiro
25/10/2009, 02:34
Una cosa es que sea compatible, otra es que tenga el mismo comportamiento.
Drumpi ya comente en el foro de Bennu varias cosas que difieren en comportamiento, como por ejemplo los fade_off, fade_on, incluso un hilo para ir apuntando diferencias...
Ya he luchado tanto por recolectar las diferencias que voy apuntando en los ports de Fenix a Bennu, y parece que sirven de poco...
[...]
Otra cosa comenta los fades, a ver que no sea por el fade_off, ya que los fades difieren en comportamiento, y tienen que tener el while(fading)frame;end en Bennu sino no funcionan (en Fenix o Div no es necesario).
Ah pues esto no lo sabía y es muy interesante. Es este (http://forum.bennugd.org/index.php?topic=803.0) tema si no me equivoco, ¿no? Quizás sería útil irlo recopilando en el wiki, si hace falta ayuda puedo colaborar.
Rivroner
25/10/2009, 02:41
Jeje, pues muchas gracias a los 3 voy mirando y corrigiendo eso a ver si es algo de lo que me comentáis, pero en Fenix va, que lo sepáis. :D
< - >
Otra cosa comenta los fades, a ver que no sea por el fade_off, ya que los fades difieren en comportamiento, y tienen que tener el while(fading)frame;end en Bennu sino no funcionan (en Fenix o Div no es necesario).
Yeaaaahhh!!!! Eso era :quepalmo:
Un pooto fade ON en este caso, el que os he puesto que hay debajo del stop_scroll(3); [wei]
Gracias de verdad. :)
Lo que no entiendo es porqué los anteriores fade ON no dan problemas, ¿será porque este está dentro de un repeat?
Lo más triste es que no me sirve de nada, me sigue poniendo las Z mal en BennuGD igualmente [wei]
Será que la Z de mi personaje la asigno mal o algo, pues he probado de todo :(
Encima en BennuGD mi parallax cutre no funciona, se queda quieto :D
¿Este tipo de sentencia funciona en Bennu o da problemas? x=xrelativa-scroll.x0/5 En fenix me va sin problemas.
GameMaster
25/10/2009, 07:54
Por fin mi lucha contra el mundo dio resultado, ;)
Por cierto lo del fade_off lo comente la primera vez por aqui...
http://www.gp32spain.com/foros/showthread.php?p=952158&highlight=fading#post952158
< - >
Jeje, pues muchas gracias a los 3 voy mirando y corrigiendo eso a ver si es algo de lo que me comentáis, pero en Fenix va, que lo sepáis. :D
< - >
Yeaaaahhh!!!! Eso era :quepalmo:
Un pooto fade ON en este caso, el que os he puesto que hay debajo del stop_scroll(3); [wei]
Gracias de verdad. :)
Lo que no entiendo es porqué los anteriores fade ON no dan problemas, ¿será porque este está dentro de un repeat?
Lo más triste es que no me sirve de nada, me sigue poniendo las Z mal en BennuGD igualmente [wei]
Será que la Z de mi personaje la asigno mal o algo, pues he probado de todo :(
Encima en BennuGD mi parallax cutre no funciona, se queda quieto :D
¿Este tipo de sentencia funciona en Bennu o da problemas? x=xrelativa-scroll.x0/5 En fenix me va sin problemas.
Segun lo que dijo Splinter, el fade en DIV y Fenix para la ejecución del resto hasta que este termine (como si hiciera el while(fading) internamente), mientras que en Bennu no lo hace.
< - >
Ah pues esto no lo sabía y es muy interesante. Es este (http://forum.bennugd.org/index.php?topic=803.0) tema si no me equivoco, ¿no? Quizás sería útil irlo recopilando en el wiki, si hace falta ayuda puedo colaborar.
Bueno, si te interesa completar la wikipedia, te envio los que tengo apuntados (que me van surgiendo) y que ya he puesto en alguna ocasión.
< - >
Sobre las Z, no las veo en tu código, pero me imagino que hay gráficos que estan tapando otros no ??? Eso es muy facil, asigna tambien el valor de la z para cada gráfico que uses (que quieres debajo o encima de otros en el eje Z). En Bennu tambien se recomienda ponerlo, ya el orden del eje Z, que tanto DIV/Fenix/Bennu pone automaticamente a los gráficos es distinto.
Yo en un doble port de DIV --> Fenix --> Bennu, tuve que revisar en cada uno la Z de un enemigo ;)
Rivroner
25/10/2009, 08:07
Lo de la Z es un lío, las tengo bien puestas y unas cosas me las ordena como quiero pero otras no.Mepaso tanto en Fenix como en BennuGD.
Pero en Bennu encima ahora no me va el parallax que tengo hecho. :D
Por fin mi lucha contra el mundo dio resultado, ;)
¿Lucha? una cosa es que la gente no ayude porque no ha detectado problemas con el cambio (hasta ahora, los cambios que yo, particularmente, he tenido que hacer, han sido añadir el bgdc.import y cambiar de nombre las variables "error" y "null"), y otra que te ignoremos :D:D:D
Segun lo que dijo Splinter, el fade en DIV y Fenix para la ejecución del resto hasta que este termine (como si hiciera el while(fading) internamente), mientras que en Bennu no lo hace.
Sinceramente, yo no he visto que ningún juego se me haya detenido mientras hago un fade... lo mismo es que la función fade y fade_on/fade_off se comportan de forma distinta. Pero bueno, siempre he preferido la función fade que me da más control de la velocidad, y encima se pueden hacer virguerías con los colores.
Lo de la Z es un lío, las tengo bien puestas y unas cosas me las ordena como quiero pero otras no.Mepaso tanto en Fenix como en BennuGD.
Pero en Bennu encima ahora no me va el parallax que tengo hecho. :D
Lo de las Z ya te dije que lo podías mirar con la consola de depuración. Puedes probar con la de Bennu (mod_debug, y no te olvides de compilar usando -g) que según cuentan es bizcocho recién horneado.
Y lo del parallax, si es por la linea esa, empezaría por poner paréntesis para ordenar las operaciones, y luego iría mirando los valores, porque también puede ser que el truncamiento de valores esté haciendo de las suyas. Si algo no funciona, no des nada por supuesto, compruébalo todo (ya has visto el método de los "say" para localizar errores).
Rivroner
25/10/2009, 17:56
Ya, pero es que si para pasarme a Bennu voy a tener que corregir mil errores paso la verdad. :D
Si el Parallax me va perfecto en Fenix pero no en Bennu y encima en Bennu no me arregla lo de las Z me quedo en Fenix me parece. :D.
Encima en Bennu me chupa casi el doble de ram, que no sé cuanta soporta en Wiz como máximo, pero en medio nivel cutre ya me chupa 15 megas, y en Fenix sólo 8 creo.
BUeno, en eso tienes razón: si dominas Fenix y el fallo no es de Fenix, sigue con él, pero es mejor ir acostumbrándose a Bennu porque es el que tiene futuro.
Me extraña que Bennu te ocupe más RAM que Fenix ¿con qué lo mides? Obviamente, si cargas todos los módulos vas a desaprovechar memoria y rendimiento. En el momento en que sólo uses los que necesitas irá mejor. Pero bueno, aun no he hecho pruebas de memoria, y se que la función que la mide en Fenix no es muy fiable (me ha hecho cosas rarísimas).
Pero lo del parallax es rarísimo: porté el drajon lol a Bennu sin cambiar código y fue perfecto y a la primera, incluyendo los niveles con tres planos de scroll de fondo.
< - >
PD: ¿qué modo gráfico inicializas? es que por defecto, en Fenix es a 16 bits de color y en Bennu a 32, creo.
Rivroner
26/10/2009, 00:58
El uso de memoria lo miro en W7 en el administrador ese a la vez quw ejecuto en ventana.
Y sí, tienes razón, cargo todos los módulos de una lista que pusiste tú en un hilo. :D
Supongo que si quito los que no uso (que no sé cuales son :quepalmo:) la cosa mejoraría.
De todas formas, ¿cuánto aguanta la Wiz? En Fenix me chupa 9 megas ingame y 15 en BennuGD.
Uso este modo set_mode(320,240,MODE_8BITS,MODE_DOUBLEBUFFER);
La WIZ no se cuanto aguanta, porque no la tengo. Tengo GP2X y con UFenix no he podido cargar FPGs de más de 8MB.
Lo del modo pensaba que era lo que chupaba esa memoria extra, por el modo gráfico, veo que no. Lo que no se es para qué sirve el mode_doublebuffer, quizás sea eso lo que te resta gran parte de la memoria (yo no lo he usado aun).
Es fácil averiguar los módulos que usas: ve añadiendo módulos a medida que te vaya detectando funciones desconocidas al compilar :D:D:D
Rivroner
26/10/2009, 22:00
Ya si eso ya lo había pensado, a mano, de todas formas no me va el parallax así que tiro de Fenix :D
De momento son 12 megas en Fenix y me aguanta en la Wiz, pero al usar 4 planos parallax abajo, 3 arriba y 2 en medio ya la cosa baja a 48-50 fames.Quitaré lo de en medio que tampoco quedan bien. :D
Aaah, pues entonces es por eso. Definitivamente es distinto en Bennu, por eso te da el error de que no te reconoce lo de joy.left. En Bennu se puede hacer así (te digo el método que usa el juego de ejemplo bgd-pacman): primero obtienes el número de joysticks conectados con num_joy = joy_number(); (num_joy es una variable int cualquiera que debes haber declarado antes). num_joy será 0 en PC y 1 en Wiz. Es importante conocer el número de joysticks conectados ya que si estás en PC (donde no hay ningún joystick) y usas las funciones de comprobación del joystick, no funcionarán correctamente.
Además, para facilitar el trabajo, declaras estas constantes:
// Tomado de bgd-pacman
#define WIZ_UP 0
#define WIZ_UP_LEFT 1
#define WIZ_LEFT 2
#define WIZ_DOWN_LEFT 3
#define WIZ_DOWN 4
#define WIZ_DOWN_RIGHT 5
#define WIZ_RIGHT 6
#define WIZ_UP_RIGHT 7
#define WIZ_MENU 8
#define WIZ_SELECT 9
#define WIZ_L_BUTTON 10
#define WIZ_R_BUTTON 11
#define WIZ_A 12
#define WIZ_B 13
#define WIZ_X 14
#define WIZ_Y 15
#define WIZ_VOL_UP 16
#define WIZ_VOL_DOWN 17
Y ahora, para comprobar la pulsación de una tecla, y que funcione el mismo código tanto en PC como en Wiz, debes hacer, por ejemplo:
if( key(_up) || (num_joy && joy_getbutton(0,WIZ_UP)) );
// ...
end
Saludos. No viene al caso, pero leyendo este tema descubrí como controlar el manejo tanto por teclado como el de la wiz a la vez xD. Llevo poco tiempo (2 semanitas) con la wiz y hace nada que he empezado con el tema de Bennu. Voy recopilando información de lo que encuentro y la verdad este código me ha ido de perlas. ¡Muchísimas gracias!
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.