Ver la versión completa : [Ayuda] No puedo abrir archivos .dcb
Quizás parezca un poco tonto, o yo que sé, pero es que soy un novato en el tema, y siguiendo un tutorial de fenix me quedé en un punto en el que debía abrir el archivo .dcb para comprovar el estado de mi ''proyecto'', pero no me deja abrir el archivo... simplemente me dice que hay un error al abrir el archivo.
Gracias de antemano!
Jonazan2
04/02/2010, 16:56
Quizás parezca un poco tonto, o yo que sé, pero es que soy un novato en el tema, y siguiendo un tutorial de fenix me quedé en un punto en el que debía abrir el archivo .dcb para comprovar el estado de mi ''proyecto'', pero no me deja abrir el archivo... simplemente me dice que hay un error al abrir el archivo.
Gracias de antemano!
¿ Puedes publicar el error que te da el archivo ? No toqué mucho fenix pero creo que te ponia los errores al abrirlo, y si te compiló bien no se porque no te lo interpreta. ;)
De hecho según el cmd lo tengo bien, ya corregí los errores, pero simplemente me dice : Error al abrir ''archivo''
EDIT: Aunque he estado pensando y es probable que sea porque uso el mierdivista, verdad?
¿Hablas de Fenix o de Bennu?
Si es Bennu ¿has instalado Bennu o has usado una version descomprimible (rar)?
Estás abriendo el DCB con doble clic o lo estás haciendo a través del FXI/BGDI, que es como debe hacerse?
Hablo de Fenix, y lo he probado de varias maneras: Usando el interpretador de fenix (vamos, arrastrar el archivo .dcb al FXI), desde el ejecutador, o ya, a modo de desesperación, doble clic, aunque ya sabía que no me iba a funcionar...
Si has arrastrado el dcb al fxi, se te debe haber creado un fichero llamado stderr.txt y otro stdout.txt. Si pegas el contenido aquí quizás te podamos dar más ayuda, porque "error al abrir archivo" es un error que no conozco (y creo que los he visto casi todos).
Por cierto, no has dicho qué versión estás usando.
Es el 0.84 para win32, Y los archivos que dices, en efecto, aparecen en la carpeta cuando me sale el error, pero dentro de ellos no hay nada.
power256
07/02/2010, 12:23
how can i to do think you!
La 0.84... Esa iba bien, pero me extraña ese error, porque "archivo" no es ningun nombre... o es que falta dicho nombre.
Haz una cosa: copia los archivos de Fenix (fxc.exe, fxi.exe, sdl.dll, sdl_mixer.dll y zlib.dll) en la misma carpeta que tu código. Abre la linea de comandos (inicio->ejecutar->cmd) y ve hasta dicha carpeta y escribe:
fxc -g nombredelprograma.prg
A ver si te da error (no te preocupes por el -g, es para la comprobación de errores). Si todo va bien, escribe luego:
fxi nombredelprograma.dcb
A ver si dice algo más, porque parece que no haya encontrado algún archivo del propio Fenix... o en el código has escrito mal el nombre de algun fichero que usas tu.
De hecho, lo de ''archivo'' lo he puesto en representación del nombre de mi programa, que se llama meupong.prg (bueno, para ejecutarlo es meupong.dcb)
Y nada, haga lo que haga me acaba saliendo esto:
h ttp://i45.tinypic.com/2wcfi35.jpg
(quita el espacio entre h y t que sino no me deja postear enlaces xd)
Por cierto, muchas gracias por el tiempo y la ayuda que me estás prestando.
Es que, claro, archivo es muy genérico, así normal que no te sepa dar ayuda si no das información vital.
Y creo que has omitido otra: en la foto, veo un problema que, si no recuerdo mal, puede provocar un error fatal en tu PC. Está ahi, abajo a la izquierda, no, en la ventana no, más abajo, en la esquina ¿es eso un Windows Vista? (aaargh, mis ojos).
:D:D:D Nah, no tengo nada en contra de él (aparte de que chupa más recursos que el uncharted en PS1) pero creo que la versión 0.84 no es compatible con vista, más que nada porque no existía y ya se encargó M$ de destruir la retrocompatibilidad.
Hay un parche para que funcione, pero creo que es mejor que te pases a la versión 092a de Fenix, que si es compatible, y que hay port de él para GP2X/WIZ (llamado UFenix).
A las malas puedes optar por Bennu, que es la continuación y es más rápido y compatible.
Y para eso estamos, para ayudar ;)
Muchísimas gracias xD
De todos modos, ya dije que tenía vista, lo que pasa es que al no ponerlo al post principal... xD
Bueno, me bajaré el 0.92, aunque acabo de conseguir un ordenador un poco viejo, que conserva el XP y que lo usaré solamente para eso.
Muchas gracias!
EDITO:
Ya está, lo he probado y funciona a la perfección :D
Aunque ahora no se me cierra la ventanita del programa xD
Pero bueno, ya lo cerraré con el administrador de tareas xd
Lo que me jode es que en el tutorial que uso, me dice que vaya a la documentación online de Fenix, pero me sale esto:
Fatal error: Cannot access empty property in /home/divsite/public_html/classes/mysql_conn.class.php on line 78
Ya vuelvo a estar pillado xd
Veamos: para salir del jeugo deben terminarse todos los procesos, si se queda alguno vivo, no acaba. Hay una instrucción muy buena para ayudarte a poder salir cuando estas depurando un programa: LET_ME_ALONE(), mata todos los procesos salvo el que tiene esta instrucción.
Otro método más eficaz es compilar usando el parámetro -g:
FXC -g mijuego.prg
Esto añade al DCB info de depuración, y puedes abrir la consola de depuración con ALT+C, y forzar la salida con la cruz de la esquina o con ALT+X
Si quieres ayuda, hay manuales muy buenos en Fenixworld.com, donde también hay una wiki bastante apañada y hasta archivos .HLP. Te recomiendo que busques el Manual de Fenix de Oscar Torrente (Osk).
Tambien tienes el FenixPack, con muchísimos ejemplos, tutoriales, IDEs de programación y un entorno listo para programar... pero no se si funciona en Vista.
Algunos Fenixeros estamos por aqui, quedan unos pocos en el de divsite, pero la mayoría nos hemos "mudado" al foro de Bennu, y hay algunos más en el de Gemix.
Por ayuda no será ;)
Ya que estoy, voy a abusar un pococ de tu sabiduría.
El hecho es que, tengo el código hecho para representar ya una de las dos paletas del pong, solo dibujada de momento, y le doy a compilar, pero me dice que hay un error en el proceso ''Dibujar'', el cual está escrito:
Dibujar();
Lo he hecho tal y como está en el tutorial, y con la misma versión, en windows XP, pero nada.
Pues dime qué error te da exactamente (el mensaje de error es más importante que el hecho de que haya error), y un poco de código tampoco vendría mal, que yo no conozco el del tutorial ^^U
Perdón xD
Me dice:
Error in file mahpong.prg at line 56: Undefined procedure <"DIBUJAR">
El coooodigo, necesito el cooodigo, al menos, las primeras 56 lineas ;D
Básicamente, ese error te dice que has llamado a un proceso o función llamado "dibujar", pero no has escrito el código de ese proceso o bien te has equivocado al escribir el nombre.
Pero no es el único error que te puede dar ese mensaje: olvidarte de poner punto y coma, dos puntos, un paréntesis, los paréntesis de la función... por eso necesito ver el código.
Si tienes miedo de que te lo miren por el foro, podrías mandármelo por MP. Pero si dices que sigues un tutorial no debería haber problema. Tampoco creo que te vayan a robar 56 lineas :D:D:D
Me he visto obligado a reempezar el código de nuevo, y he llegado al punto que estaba antes, pero me ha salido un error diferente.:
FXC 0.92a (Apr 13 2007 13:24:24) - Copyright (C) 1999 José Luis Cebrián Pagüe
Fenix comes with ABSOLUTELY NO WARRANTY; see COPYING for details
Error in file meupong.prg at line 11: ";" expected ("GLOBAL")
Pongo ";", lo quito y hago mil virguerías, pero sigue igual.
Ahí va el código:
//--------------------------------------------------------
//Program: EL MEU PRIMER PONG
//Autor: Garreny
//Equip: Garreny' s Pingas
//--------------------------------------------------------
////////////////////////////////////////////
// Funció inicial
Program MEUPONG
Global
int RESOLUCION_X;
int RESOLUCION_Y;
int X_Paleta_1;
int Y_Paleta_1;
int Ancho_Paleta_1;
int Alto_Paleta_1;
int color_paleta_1;
BEGIN
// INICIALITZAR ASPECTES GRÀFICS
set_title("El meu primer Pong");
Full_sreeen = false;
Graph_mode = mode_16bits;
set_mode (m640x480);
set_fps(80, 60/10);
RESOLUTION_X = 640;
RESOLUTION_Y = 480;
//ESCRIURE INFORMACIÓ SOBRE EL JOC EN PANTALLA
write(0,10,10,0,"El meu primer Pong, v. 0.01");
write(0.10.20.0."Equip Garreny");
write_int(0,300,10,1,&fps);
// HEM ACABAT D' INICIALITZAR, LLANCEM EL BUCLE PRINCIPAL
Controlador:Joc(); //Arranquem el controlador del joc
END
/////////////////////////////////////////////
// Controlador de joc
Process Controlador_Juego()
BEGIN
Inicializar();
Loop // Bucle principal
If(key(_esc)) // Si s' apreta esc
exit(0,0); // Sortir del joc
End
Dibujar();
Frame; // Refrescar pantalla
End // Del loop
END
//////////////////////////////////////////////
//Inicialitza el joc en el seu estat inicial
Process Inicialitzar()
BEGIN
X_Paleta_1=30;
Y_Paleta_1=24;
Ancho_paleta_1=20;
Alto_Paleta_1=100;
END
//////////////////////////////////////////////
// Dibuixa els elements del joc en pantalla
Process Dibuixar()
Begin
clear_screen();
drawing_map(0,0);
// Dibuixar Paleta 1
drawing_color(rgb(255,255,255));
draw_box(X_Paleta_1+Ancho_Paleta_1/2, Y_Paleta_1-Alto_Paleta_1/2,
X_Paleta_1+Ancho_Paleta_1/2, Y_Paleta_1+Alto_Paleta_1/2);
END
No me importa que pongas el código en el idioma que quieras, pero al menos se consecuente con ello :D
Lo digo porque:
// HEM ACABAT D' INICIALITZAR, LLANCEM EL BUCLE PRINCIPAL
Controlador:Joc(); //Arranquem el controlador del joc
END
Process Controlador_Juego()
Además, no es Controlador:Joc(); sino Controlador_Joc(); A saber qué error te hubiera dado.
Respecto al que te ha dado ahora, es que en la linea
Program MEUPONG
te falta un ; al final de la linea. Según qué versión de Fenix, el error te lo da en la misma linea o en la linea siguiente (supongo que el contador de linea se actualiza antes de tiempo al compilar).
No te tomes los errores de forma literal, porque en ocasiones salta unas cuantas lineas más adelante de la cuenta: repasa el código, y no olvides compilar cada poco para asegurarte de que lo que escribes está bien hecho, es más fácil corregir 20 líneas que 200.
Mirando un poco el error que te da es por lo siguiente:
If(key(_esc)) // Si s' apreta esc
exit(0,0); // Sortir del joc
End
Dibujar();
Llamas al proceso Dibujar() (castellano) pero luego defines el proceso como:
//////////////////////////////////////////////
// Dibuixa els elements del joc en pantalla
Process Dibuixar()
Begin
clear_screen();
Frame; // Refrescar pantalla
Has definido el proceso como Dibuixar (en Català en vez de Dibujar (Castellano)... los dos nombre han de ser iguales).
Esta claro... Fenix/Bennu no es poliglota :D
Es como si a tu hijo le pones de nombre Juanito y luego te extrañas que al llamarlo gritando: Pedrito! no te haga ni caso.
Bien, gracias, ya he quitado los errores y me ha salido la pantalla, pero debería verse una pala del pong, pero no me aparece...
Código:
//--------------------------------------------------------
//Program: EL MEU PRIMER PONG
//Autor: Garreny
//Equip: Garreny' s Pingas
//--------------------------------------------------------
////////////////////////////////////////////
// Funció inicial
Program MEUPONG;
Global
int RESOLUCION_X;
int RESOLUCION_Y;
int X_Paleta_1;
int Y_Paleta_1;
int Ancho_Paleta_1;
int Alto_Paleta_1;
int color_paleta_1;
BEGIN
// INICIALITZAR ASPECTES GRÀFICS
set_title("El meu primer Pong");
Full_screen = false;
Graph_mode = mode_16bits;
set_mode (m640x480);
set_fps(80, 60/10);
RESOLUCION_X = 640;
RESOLUCION_Y = 480;
//ESCRIURE INFORMACIÓ SOBRE EL JOC EN PANTALLA
write(0,10,10,0,"El meu primer Pong, v. 0.01");
write(0,10,20,0,"Equip Garreny");
write_int(0,300,10,1,&fps);
// HEM ACABAT D' INICIALITZAR, LLANCEM EL BUCLE PRINCIPAL
Controlador_Juego(); //Arranquem el controlador del joc
END
/////////////////////////////////////////////
// Controlador de joc
Process Controlador_Juego()
BEGIN
Inicializar();
Loop // Bucle principal
If(key(_esc)) // Si s' apreta esc
exit(0,0); // Sortir del joc
End
Dibujar();
Frame; // Refrescar pantalla
End // Del loop
END
//////////////////////////////////////////////
//Inicialitza el joc en el seu estat inicial
Process Inicializar()
BEGIN
X_Paleta_1=30;
Y_Paleta_1=24;
Ancho_paleta_1=20;
Alto_Paleta_1=100;
END
//////////////////////////////////////////////
// Dibuixa els elements del joc en pantalla
Process Dibujar()
Begin
clear_screen();
drawing_map(0,0);
// Dibuixar Paleta 1
drawing_color(rgb(255,255,255));
draw_box(X_Paleta_1+Ancho_Paleta_1/2, Y_Paleta_1-Alto_Paleta_1/2,
X_Paleta_1+Ancho_Paleta_1/2, Y_Paleta_1+Alto_Paleta_1/2);
END
Bien, gracias, ya he quitado los errores y me ha salido la pantalla, pero debería verse una pala del pong, pero no me aparece...
Código:
//--------------------------------------------------------
//Program: EL MEU PRIMER PONG
//Autor: Garreny
//Equip: Garreny' s Pingas
//--------------------------------------------------------
////////////////////////////////////////////
// Funció inicial
Program MEUPONG;
Global
int RESOLUCION_X;
int RESOLUCION_Y;
int X_Paleta_1;
int Y_Paleta_1;
int Ancho_Paleta_1;
int Alto_Paleta_1;
int color_paleta_1;
BEGIN
// INICIALITZAR ASPECTES GRÀFICS
set_title("El meu primer Pong");
Full_screen = false;
Graph_mode = mode_16bits;
set_mode (m640x480);
set_fps(80, 60/10);
RESOLUCION_X = 640;
RESOLUCION_Y = 480;
//ESCRIURE INFORMACIÓ SOBRE EL JOC EN PANTALLA
write(0,10,10,0,"El meu primer Pong, v. 0.01");
write(0,10,20,0,"Equip Garreny");
write_int(0,300,10,1,&fps);
// HEM ACABAT D' INICIALITZAR, LLANCEM EL BUCLE PRINCIPAL
Controlador_Juego(); //Arranquem el controlador del joc
END
/////////////////////////////////////////////
// Controlador de joc
Process Controlador_Juego()
BEGIN
Inicializar();
Loop // Bucle principal
If(key(_esc)) // Si s' apreta esc
exit(0,0); // Sortir del joc
End
Dibujar();
Frame; // Refrescar pantalla
End // Del loop
END
//////////////////////////////////////////////
//Inicialitza el joc en el seu estat inicial
Process Inicializar()
BEGIN
X_Paleta_1=30;
Y_Paleta_1=24;
Ancho_paleta_1=20;
Alto_Paleta_1=100;
END
//////////////////////////////////////////////
// Dibuixa els elements del joc en pantalla
Process Dibujar()
Begin
clear_screen();
drawing_map(0,0);
// Dibuixar Paleta 1
drawing_color(rgb(255,255,255));
draw_box(X_Paleta_1+Ancho_Paleta_1/2, Y_Paleta_1-Alto_Paleta_1/2,
X_Paleta_1+Ancho_Paleta_1/2, Y_Paleta_1+Alto_Paleta_1/2);
END
¿Ves algo raro? :D
A este paso me lo vas a acabar haciendo tu xd
Espero que sean normales estos problemas en un novato, porque sino me retiro xD
Bueno, yo sigo, ya me ha salido la pala de pong, ahora a por lo demás.
GameMaster
15/02/2010, 19:53
Animo Garreny, tus problemas nos han ocurrido a todos. No desistas, esperamos los años que sean por tu mega hit :brindis:
Gracias!
Bueno, he aquí otro problema:
Ya he puesto las dos paletas, la bola y todo, y la bola rebota perfectamente contra las paredes superior e inferior, pero las paletas las traspasa y no entiendo porqué.
Aquí va el código de las colisiones:
Process Control_Bola()
Begin
// COL·LISIONS AMB LA PALETA 1
if(Velocidad_Bola_X < 0 && X_Bola>X_Paleta_1
&& X_Bola-Ancho_Bola/2<=X_Paleta_1+Ancho_Paleta_1/2)
if(abs(Y_Paleta_1-Y_Bola)<Alto_Paleta_1*0.5+Alto_Bola*0.5)
Velocidad_Bola_X *=-1;
End
End
// COL·LISIONS AMB LA PALETA 2
if(Velocidad_Bola_X >0 && X_Bola<X_Paleta_2
&& X_Bola+Ancho_Bola/2>=X_Paleta_2+Ancho_Paleta_2/2)
if(abs(Y_Paleta_2-Y_Bola)<Alto_Paleta_2*0.5+Alto_Bola*0.5)
Velocidad_Bola_X *=-1;
End
End
//COL·LISIONS AMB LES PARETS SUPERIOR I INFERIOR
if(Velocidad_Bola_Y<0 && Y_Bola-Ancho_Bola*0.5<=50)
Velocidad_Bola_Y *=-1;
End
if(Velocidad_Bola_Y>0 && Y_Bola-Ancho_Bola*0.5>=430)
Velocidad_Bola_Y *=-1;
End
X_Bola+=Velocidad_Bola_X;
Y_Bola+=Velocidad_Bola_Y;
End
Y bueno, si necesitais en código entero:
Program MEUPONG;
Global
int RESOLUCION_X;
int RESOLUCION_Y;
// VARIABLES GLOBALS
int Velocidad_Paletas;
// CARACTERÍSTIQUES DE LA PALETA 1
int X_Paleta_1;
int Y_Paleta_1;
int Ancho_Paleta_1;
int Alto_Paleta_1;
int color_paleta_1;
// CARACTERÍSTIQUES DE LA PALETA 2
int X_Paleta_2;
int Y_Paleta_2;
int Ancho_Paleta_2;
int Alto_Paleta_2;
int color_paleta_2;
// CARACTERÍSTIQUES DE LA BOLA
int X_Bola;
int Y_Bola;
int Ancho_Bola;
int Alto_Bola;
int Color_Bola;
int Velocidad_Bola_X;
int Velocidad_Bola_Y;
BEGIN
// INICIALITZAR ASPECTES GRÀFICS
set_title("El meu primer Pong");
Full_screen = false;
Graph_mode = mode_16bits;
set_mode (m640x480);
set_fps(80, 60/10);
RESOLUCION_X = 640;
RESOLUCION_Y = 480;
//ESCRIURE INFORMACIÓ SOBRE EL JOC EN PANTALLA
write(0,10,10,0,"El meu primer Pong, v. 0.01");
write(0,10,20,0,"Equip Garreny");
write_int(0,300,10,1,&fps);
// HEM ACABAT D' INICIALITZAR, LLANCEM EL BUCLE PRINCIPAL
Controlador_Juego(); //Arranquem el controlador del joc
END
/////////////////////////////////////////////
// Controlador de joc
Process Controlador_Juego()
BEGIN
Inicializar();
Loop // Bucle principal
If(key(_esc)) // Si s' apreta esc
exit(0,0); // Sortir del joc
End
Actualizar();
Dibujar();
Frame; // Refrescar pantalla
End // Del loop
END
//////////////////////////////////////////////
//Inicialitza el joc en el seu estat inicial
Process Inicializar()
BEGIN
Velocidad_Paletas = 5;
// INICIALITZAR LA PALETA 1
X_Paleta_1=30;
Y_Paleta_1=240;
Ancho_paleta_1=20;
Alto_Paleta_1=100;
// INICIALITZAR LA PALETA 2
X_Paleta_2=610;
Y_Paleta_2=240;
Ancho_paleta_2=20;
Alto_Paleta_2=100;
// INICIALITZAR BOLA
X_Bola=320;
Y_Bola=240;
Ancho_Bola=15;
Alto_Bola=15;
Velocidad_Bola_X = 3;
Velocidad_Bola_Y = 3;
END
//////////////////////////////////////////////
// Dibuixa els elements del joc en pantalla
Process Dibujar()
Begin
clear_screen();
drawing_map(0,0);
// Dibuixar Paleta 1
drawing_color(rgb(255,255,255));
draw_box(X_Paleta_1-Ancho_Paleta_1/2, Y_Paleta_1-Alto_Paleta_1/2,
X_Paleta_1+Ancho_Paleta_1/2, Y_Paleta_1+Alto_Paleta_1/2);
// Dibuixar Paleta 2
drawing_color(rgb(255,255,255));
draw_box(X_Paleta_2-Ancho_Paleta_2/2, Y_Paleta_2-Alto_Paleta_2/2,
X_Paleta_2+Ancho_Paleta_2/2, Y_Paleta_2+Alto_Paleta_2/2);
// DIBUIXAR BOLA
drawing_color(rgb(255,255,255));
draw_box(X_Bola-Ancho_Bola/2, Y_Bola-Alto_Bola/2,
X_Bola+Ancho_Bola/2, Y_Bola+Alto_Bola/2);
END
/////////////////////////////////////////////
//Actualitza la llògica del joc
Process Actualizar()
Begin
// ACTUALITZAR PALETA 1
if(key(_up) AND Y_Paleta_1-Alto_Paleta_1/2 > 50) //Si s' apreta "amunt" i la paleta no ha arribat fins a dalt
Y_Paleta_1 -=Velocidad_Paletas; // Fem que pugi
End
if(key(_down) AND Y_Paleta_1+Alto_Paleta_1/2 < 430) //Si s' apreta "avall" i la paleta no ha aribat abaix
Y_Paleta_1 +=Velocidad_Paletas; //Fem que baixi
End
// ACTUALITZAR PALETA 2
if(key(_k) AND Y_Paleta_2-Alto_Paleta_2/2 > 50) //Si s' apreta "amunt" i la paleta no ha arribat fins a dalt
Y_Paleta_2 -=Velocidad_Paletas; // Fem que pugi
End
if(key(_m) AND Y_Paleta_2+Alto_Paleta_2/2 < 430) //Si s' apreta "avall" i la paleta no ha aribat abaix
Y_Paleta_2 +=Velocidad_Paletas; //Fem que baixi
End
Control_Bola();
End
//////////////////////////////////////////////
// ACTUALITZA LA LLÒGICA DE LA BOLA
Process Control_Bola()
Begin
// COL·LISIONS AMB LA PALETA 1
if(Velocidad_Bola_X < 0 && X_Bola>X_Paleta_1
&& X_Bola-Ancho_Bola/2<=X_Paleta_1+Ancho_Paleta_1/2)
if(abs(Y_Paleta_1-Y_Bola)<Alto_Paleta_1*0.5+Alto_Bola*0.5)
Velocidad_Bola_X *=-1;
End
End
// COL·LISIONS AMB LA PALETA 2
if(Velocidad_Bola_X >0 && X_Bola<X_Paleta_2
&& X_Bola+Ancho_Bola/2>=X_Paleta_2+Ancho_Paleta_2/2)
if(abs(Y_Paleta_2-Y_Bola)<Alto_Paleta_2*0.5+Alto_Bola*0.5)
Velocidad_Bola_X *=-1;
End
End
//COL·LISIONS AMB LES PARETS SUPERIOR I INFERIOR
if(Velocidad_Bola_Y<0 && Y_Bola-Ancho_Bola*0.5<=50)
Velocidad_Bola_Y *=-1;
End
if(Velocidad_Bola_Y>0 && Y_Bola-Ancho_Bola*0.5>=430)
Velocidad_Bola_Y *=-1;
End
X_Bola+=Velocidad_Bola_X;
Y_Bola+=Velocidad_Bola_Y;
End
No te preocupes, todas las dudas son muy normales en los novatos, no tienes más que echar un vistazo en el foro de bennu :D
Ahora estoy un poquito espeso, te lo tendría que mirar con mucha más calma mañana, pero sí que te voy a dar un par de consejos para que trabajes:
-Los paréntesis NUNCA SOBRAN, lo digo por las lineas
f(Velocidad_Bola_X >0 && X_Bola<X_Paleta_2
&& X_Bola+Ancho_Bola/2>=X_Paleta_2+Ancho_Paleta_2/2)
Que no queda claro dónde empieza y donde termina cada miembro de la comparación, es más, me atrevería a decir que no sigue ni el orden de operaciones que tu quieres. Nosotros, como personas inteligentes, sabemos que hay que multiplicar/dividir antes de sumar y restar, la máquina lo sabe, pero es posible que no (NUNCA DES POR SUPUESTO QUE LA MÁQUINA HACE LO QUE DEBE, regla fundamental), lo digo porque ahi veo una suma seguida de una división, y no se si el divisor engloba a los dos términos de la suma (por lo que estaría mal) o no (por lo que podría estar bien).
-No uses
Velocidad_Bola_X *=-1;
A menos que tengas MUY controlado lo que haces, lo digo por experiencia propia. A poco que la bola se meta más de la cuenta, puede empezar a rebotarte de mala manera.
-No usas la potencia del lenguaje, es decir, programas como si fuera C. Puedes crear una pala y mantenerla en un bucle infinito (poniento un FRAME dentro, claro) y que compruebe los botones para moverse, y crear el proceso bola y mantenerlo vivo todo el tiempo. Bennu usa los procesos como instancias que se ejecutan en paralelo, y van todos a la vez, y son independientes unos de otros. Te recomiendo que busques el clásico ejemplo del matamarcianos, viene en el Manual de Fenix/Bennu de Oscar Torrente (es EL MANUAL), o uno mas pequeño en FenixWorld.com hecho por un humilde servidor.
Cuesta un poco cogerle el truco a este tipo de programación, pero a la larga, verás que viene mejor para videojuegos, e incluso para aprender técnicas más avanzadas de programación (sí, hablo de pensar en multi-hilo o multi-nucleo).
Y un último consejo, basado en la regla básica: COMPRUEBA QUE DE VERDAD SE DAN LAS CONDICIONES DEL REBOTE, aunque tengas que ir una por una. Si dices que la x de la bola debe ser menor que la de la paleta, comprueba que es así.
Mira lo de los paréntesis, y si mañana sigue igual, te buscaré la solución.
He peusto los paréntesis en todas las colisiones y nada...
Process Control_Bola()
Begin
// COL·LISIONS AMB LA PALETA 1
if(Velocidad_Bola_X < 0 && X_Bola>X_Paleta_1 && (X_Bola-(Ancho_Bola/2))<=(X_Paleta_1+(Ancho_Paleta_1/2)))
if(abs(Y_Paleta_1-Y_Bola)<(Alto_Paleta_1*0.5)+(Alto_Bola*0.5))
Velocidad_Bola_X *=-1;
End
End
// COL·LISIONS AMB LA PALETA 2
if(Velocidad_Bola_X > 0 && X_Bola<X_Paleta_2 && (X_Bola+(Ancho_Bola/2))>=(X_Paleta_2+(Ancho_Paleta_2/2)))
if(abs(Y_Paleta_2-Y_Bola)<(Alto_Paleta_2*0.5)+(Alto_Bola*0.5))
Velocidad_Bola_X *=-1;
End
End
//COL·LISIONS AMB LES PARETS SUPERIOR I INFERIOR
if(Velocidad_Bola_Y<0 && (Y_Bola-(Ancho_Bola*0.5))<=50)
Velocidad_Bola_Y *=-1;
End
if(Velocidad_Bola_Y>0 && (Y_Bola-(Ancho_Bola*0.5))>=430)
Velocidad_Bola_Y *=-1;
End
X_Bola+=Velocidad_Bola_X;
Y_Bola+=Velocidad_Bola_Y;
End
Y esto con qué lo sustituyo?
Velocidad_Bola_X *=-1;
Es que el tutorial no explica las colisiones, solo las pone, y ahí acaba.
Mirándolo así por encima, supongo que el fallo está en la linea:
if(Velocidad_Bola_X < 0 && X_Bola>X_Paleta_1 && (X_Bola-(Ancho_Bola/2))<=(X_Paleta_1+(Ancho_Paleta_1/2)))
Entiendo que al tener velocidad <0, la paleta 1 es la de la izquierda.
Luego compruebas que la bola esté a la DERECHA de la posición de la paleta (X_Bola>X_Paleta_1)
Y luego tienes la tercera comprobación que, si no entiendo mal, dices que el lado izquierdo de la bola debe estar más a la IZQUIERDA que el lado derecho de la paleta ¿no?
Lo que significa que la bola debería rebotar en dicha superposición. Ahora bien ¿qué velocidad máxima lleva la bola horizontalmente? te lo digo porque como sea mayor que ese pequeño espacio, es posíble que se lo "salte" (en un frame está a la izquierda, y en el siguiente está a la derecha, y nunca en los intermedios).
Si la velocidad es de 1, no debería haber problema.
Lo de la y parece que está bien, pero para asegurarnos, no multipliques por 0'5, procura evitar los decimales a toda costa, sobre todo en Fenix: divide entre 2 o haz un desplazamiento binario, pero no multipliques por un FLOAT, porque dan muchísimos problemas en UFenix.
En el caso de la paleta1, la linea:
Velocidad_Bola_X *=-1;
Lo cambiaría por
Velocidad_Bola_X =max_velocidad;
y en la 2 por
Velocidad_Bola_X =-max_velocidad;
Creo que es lógico ¿no? no copies el código, escríbelo tú y luego lo compruebas.
Si no, prueba a pasarte por el foro de Bennu, ocho ojos ven más que cuatro ;)
En qué foro dices? xD
Lo he toqueteado, y nada.
Velocidad_Bola_X = 1;
Velocidad_Bola_Y = 1;
max_velocidad = 3/2;
max_velocidad = 3/2;
Las velocidades X y Y las tenía a tres, las he bajado y probado una a una, pero sigue sin colisionar con las placas (que de hecho, la bola va hacia la derecha, es decir, tendría que colisionar con la paleta 2).
Me refiero al foro de bennu:
bennugd.org
Y de ahi a official forum, tranquilo, está en español.
Es que aqui entro sólo cuando tengo tiempo libre: a las tantas de la noche ^^U
Ya está mi petición de ayuda hecha en bennugd. Ahora a esperar. Muchas gracias por todo a todos.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.