Ver la versión completa : Saludos y duda con fenix.
Muy buenas a todos , soy nuevo por aquí ,hace un tiempo vendí mi PSP para comprarme una GP2X F200 ya que el tema de la emulación y la posibilidad de programar algo para la misma me entusiasman.
Bueno , vamos al grano , estoy empezando con fenix y he hecho un sencillísimo juego pero no me compila y nose que esta mal , probablemente muchas cosas.
Dejo el código por si algún alma caritativa quiere ofrecerse a ver que falla.
Saludos.
Vuelvo a postear que había subido mal el archivo.
Este es el bueno;
¿Podrías indicarnos el fallo que da al compilar? Yo desde aqui no puedo compilarlo porque no tengo el fenix.
¿Podrías indicarnos el fallo que da al compilar? Yo desde aqui no puedo compilarlo porque no tengo el fenix.
Pues esto es lo curioso , que me da fallo en la segunda línea .
es así ;
PROGRAM Aparca tu coche ;
GLOBAL
Saludos.
JUAS ¿como no lo he visto?
Prueba a poner Aparca_tu_coche; o en todo caso Aparca_tu_coche();
no se pueden dar nombres con espacios a los programas, a las funciones, a las constantes, ni a las variables.
JUAS ¿como no lo he visto?
Prueba a poner Aparca_tu_coche; o en todo caso Aparca_tu_coche();
no se pueden dar nombres con espacios a los programas, a las funciones, a las constantes, ni a las variables.
Ok , gracias.
Ahora me da fallo en la línea 11 xD.
frenar=load_wav("frenar.wav");
Saludos.
¿has declarado la variable frenar? ¿existe el wav? ¿está en la carpeta adecuada? ¿tiene todos los parámetros esa funcion? ¿el error es de la linea anterior?
GLOBAL
int id1; // ¿Es aquí donde tengo que definir las variables de los sonidos?
end
Begin
set_mode(320,240,1);
set_fps(50,1);
set_title("Aparca tu coche");
id1=load_fpg("imagenes.fpg");
acelerar=load_wav("acelerar.wav");
frenar=load_wav("frenar.wav");
fin=load_wav("fin.wav");
¿Entonces quedaría así?
GLOBAL
int id1;
acelerar;
frenar;
fin;
end
Begin
set_mode(320,240,1);
set_fps(50,1);
set_title("Aparca tu coche");
id1=load_fpg("imagenes.fpg");
acelerar=load_wav("acelerar.wav");
frenar=load_wav("frenar.wav");
fin=load_wav("fin.wav");
Saludos.
Si, si las quieres como variables globales.
Ten cuidado porque, si no te has dado cuenta, te dice que el fallo está en la linea siguiente a la que realmente está (decías que daba error en la linea 2 cuando te daba en la linea 1, la del program).
SI, queda mejora así.
Un truco para definir variables sin tantas lineas es hacer:
int id1,acelerar,frenar,fin;
Muy buenas , tengo otro problemilla y es que en la línea 19 (la de "Begin") me da error y pone que no identifica el proceso , y no entiendo por qué. Asi que definí la variable pantalla (que es el menú) pero ni aún así funciona.
Program Aparca_tu_coche;
GLOBAL
int id1,acelerar,frenar,pantalla,fin;
end
Begin
set_mode(320,240,1);
set_fps(50,1);
set_title("Aparca tu coche");
id1=load_fpg("imagenes.fpg");
acelerar=load_wav("acelerar.wav"); //cargando la música.
frenar=load_wav("frenar.wav");
fin=load_wav("fin.wav");
pantalla(); //¿Sólo cargo el menú?
loop
If(key(_esc)) exit(0); End;
Frame;
End;
Process pantalla();
Begin // Fallo en la línea 19 ¿?
file=id1 graph=1; X=160; y=120;
write(0,160,120,1,"aprendiendo fenix");//señalo fuente, asignación x e y,tipo y texto.
write(0,190,130,1,"Aparca tu coche version beta 1");
write(0,100,100,1,"Pulsa Start");
loop
If (key(_enter));
delete_text(0); // se borra el texto pero ... ¿qué viene a continuación?
fondo();
Break;
end;
Frame;
end;
end;
PROCCES fondo();
Begin
graph=2; x=160; y=120;
end; // ¿ Son necesarios 2 "end"?
end;
PROCCES coche();
Begin
graph=3; x=10; y=120;
LOOP
IF (key(_up)) y=y-1; END
IF (key(_down)) y=y+1; END
IF (key(_left)) x=x-1; END
IF (key(_right)) x=x+1; END
IF (key(_enter)) graph=1; END // ¿ Es necesario poner ";" despues de la función enter ?
IF (collision(TYPE aparcamiento)) BREAK; END
FRAME;
END
END
PROCCES aparcamiento();
Begin
graph=4; x=200; y=300;
Loop
If (collision(TYPE coche)) BREAK; END
Frame;
end
end
PROCCES puntuacion();
Begin
loop
If collision(TYPE aparcamiento); graph=5; end // No utilizo identificadores asik simplifico.
Frame;
end
endSaludos y gracias a chipan y a drumpi.
revisa los "END" y ";" ,debes tener cuidado de que no se te cuelen de mas o te falte alguno casi seguro que tus problemas vengan de ahi. Quizad ese ; del END anterior al Process pantalla() sobre, y si es asi te sobraran otros tantos mas adelante...
No lo he compilado, pero así a ojo te pongo el código arreglado con comentarios.
Ánimo con el fénix, hay muchos tutoriales en internet.
// NOTAS:
// Separa los procesos con líneas en blanco
// Indentar los bloques hace más legible el código
// Cada bloque Begin debe terminar con un end y cada loop igual.
// Si no cierras bloque process te dará error en el siguiente proceso.
// No es necesario poner ";" después de END
// Mira que tus procesos sean llamados desde algún sitio
Program Aparca_tu_coche;
GLOBAL
int id1,acelerar,frenar,pantalla,fin;
end
// programa principal
Begin
set_mode(320,240,1);
set_fps(50,1);
set_title("Aparca tu coche");
id1=load_fpg("imagenes.fpg");
acelerar=load_wav("acelerar.wav"); //cargando la música.
frenar=load_wav("frenar.wav");
fin=load_wav("fin.wav");
pantalla(); // ¿Sólo cargo el menú?
loop
If(key(_esc)) exit(0); End
Frame;
End
End // te faltaba este end (por eso el error)
Process pantalla();
Begin // Fallo en la línea 19 ¿? (por el end de arriba)
file=id1 graph=1; X=160; y=120;
write(0,160,120,1,"aprendiendo fenix");//señalo fuente, asignación x e y,tipo y texto.
write(0,190,130,1,"Aparca tu coche version beta 1");
write(0,100,100,1,"Pulsa Start");
loop
If (key(_enter));
delete_text(0); // se borra el texto pero ... ¿qué viene a continuación?
fondo();
Break;
end
Frame;
end
end
Process fondo();
Begin
graph=2; x=160; y=120;
end
//end // sobra un end
Process coche();
Begin
graph=3; x=10; y=120;
LOOP
IF (key(_up)) y=y-1; END
IF (key(_down)) y=y+1; END
IF (key(_left)) x=x-1; END
IF (key(_right)) x=x+1; END
IF (key(_enter)) graph=1; END // ¿ Es necesario poner ";" despues de la función enter ?
IF (collision(TYPE aparcamiento)) BREAK; END
FRAME;
END
END
Process aparcamiento();
Begin
graph=4; x=200; y=300;
Loop
If (collision(TYPE coche)) BREAK; END
Frame;
end
end
// NOTA: este proceso nunca es ejecutado
Process puntuacion();
Begin
loop
If collision(TYPE aparcamiento); graph=5; end // No utilizo identificadores asik simplifico.
Frame;
end
end
Gracias a todos , ya me compila.
Saludos y a ver si dentro de un tiempo puedo publicar este juego , me tengo quer currar aún los gráficos y el sonido.
< - >
Buenas , siento ser tan pesado , pero he hecho unos gráficos rápidos con el pack de neostalker pero cuando ejecuto el archivo ".dcb" , me dice que es un profundidad de color no soportada.
El Fallo es :
(gr_rotated_blit)
Saludos.
Fácil: en set_mode estás poniendo una profundidad de color de 1 bit ^^
Usa 8 o 16 bits, según uses sólo gráficos de 256 colores con la misma paleta, o de 16 o múltiples de 8 con paletas distintas.
Y no te preocupes, se todo lo pesado que necesites, al principio todo son dudas tontas o no tanto, luego... seguirás tropezándote en tonterías XDDD
ánimo chaval. que así se empieza y nunca se sabe a donde se puede llegar!
masteries
20/05/2008, 02:06
Gráficos rápidos con el pack de neostalker...?? qué es el pack de NeoStalker?
Yo ahora mismo me estaba currando los personajes de mi nuevo proyecto con Poser 4, de momento el menú y las pantallas de presentación y el soporte para la pantalla táctil están completos. Por cierto que en breve adaptaré el soporte táctil a mi primer juego en Fénix, el Dr.Mates y tengo lista una revisión de la versión actual para los que tengais una F100. Me lío a hablar demasiado...
Suerte con tu juego de aparcar coches y bienvenido al mundo Fénix!!
Gráficos rápidos con el pack de neostalker...?? qué es el pack de NeoStalker?
Sí , el pack de Neostalker es un pack de gráficos muy útil que puedes encontrar en la sección de descargas , en el apartado de programación.
Saludos.
masteries
20/05/2008, 19:00
Gracias.
Perdón por el reflote , pero me da otro error y no sé cómo solucionarlo. He probado quitado los ";" y demás pero no hay manera.
Cont=retardo; // Aquí da fallo.
disparo();
end
Frame;
end
endEl fallo es :
";" expected ("CONT")Saludos.
Es probable que el fallo esté en la línea de antes, y te falte ; al final :)
ya juanvvc , da fallo en la línea de "disparo();" pero supongo que será la de arriba.
A todo esto, a ver si pruebo ya tu lemonboy juan , que debe ser cojonuido según dicen xD .
Edito para poner más código por si viene el problema de líneas anteriores , pero lo veo improbable :
// ...
Loop
cont--;
IF (cont<0) cont=0; END
IF (key(_up)) y=y-1; END
IF (key(_down)) y=y+1; END
IF (key(_left)) x=x-1; END
IF (key(_right)) x=x+1; END
IF (x>320) ; END
IF (y>240) ; END
If (key(_x)) and (cont==0)
Cont=retardo;
disparo();
end
Frame;
end
end
Saludos.
Si, es la linea anterior al cont, te dice que esparaba un punto y coma y se ha encontrado la palabra cont. Prueba a poner paréntesis a toda la condición del if:
If ((key(_x)) and (cont==0))
Puede que esté confundiendo el "and (cont==0)" como instrucciones de dentro del if y que le falte el punto y coma (no se lo pongas, prueba con los paréntesis. Aunque
if (key(_x) and (cont==0))
también vale.
zikitrake
05/06/2008, 15:58
Es más
if (key(_x) and cont==0)
Si, como valer, vale, porque el == tiene mñas prioridad que el AND, pero por si acaso, como hay lenguajes que son muy suyos, prefiero acostumbrarme a poner paréntesis.
Ya lo decían mis profes: los paréntesis más vale que sobren que no que falten ((()))()()((()((()))))
zikitrake
05/06/2008, 16:28
Si, como valer, vale, porque el == tiene mñas prioridad que el AND, pero por si acaso, como hay lenguajes que son muy suyos, prefiero acostumbrarme a poner paréntesis.
Ya lo decían mis profes: los paréntesis más vale que sobren que no que falten ((()))()()((()((())))):) : ) : ))) : )))) : ))))) aquí se ve que sólo vale un paréntesis [wei]
(Ah! ya me hubiera gustado haber tenido un profe que me bien-encaminara en esto de la programación)
(Ah! ya me hubiera gustado haber tenido un profe que me bien-encaminara en esto de la programación)
(A mi tambien)
Siento el offtopic, tenía que decirlo.
Buenas de nuevo amigos.
Me estoy currando un remake del juego bubbles (un juego flash que está en la zona arcade de esta página).
Y no va mal la cosa , pero me da un fallo que no se solventar por más que cambio las cosas :
loop
If (rand(0,100)<20)
Enemigo(rand(0,18),rand(-1,1),rand(2,5)); // Aquí da el fallo
EndA ver que sale de este "supuesto" futuro remake de bubbles. :D
Me da fallo de incorrecto número de parametros , que no reconoce a "enemigo" (lo cual no entiendo por qué) , me dice que espera ";" en vez de "," y muchos fallos más ... xD
Si alguien sabe cómo se escribiría esa línea.
Saludos y gracias .
Pon la cabecera del proceso enemigo.
Pon la cabecera del proceso enemigo.
¿A qué te refieres?
Es que yo a veces me vuelvo loco con fenix.
Process enemigo ();
Esa es la cabecera.
Otra cosa que me ocurre , es que en el panel derecho donde el inspector de programas , no me reconoce el proceso enemido y antes si :confused: .
Saludos y gracias chipan x contestar.
ejem entonces ya he visto el problema.
A ver, tu llamas al proceso enemigo así
enemigo(rand(0,18),rand(-1,1),rand(2,5));
Y la cabecera del proceso enemigo es así
Process enemigo();
¿no te parece que falta algo?
lo que metes en la llamada al proceso son parametros que HAN DE EXISTIR en la cabecera del proceso.
Ahora supongo que tendras algo así:
Process enemigo();
private
int a;
int b;
int c;
begin
...loquesea...
La cabecera tendría que quedar similar a esto.
Process enemigo(int a, int b, int c);
begin
...loquesea...
Es decir, puedes declarar variables privadas o dejar accesibles variables locales en la propia cabecera del proceso en lugar de declararlas dentro.
Si pones un poco mas de código (el del proceso enemigo) te lo corrijo y te lo explico un poco mejor
Aquí va el código del proceso enemigo :
Process enemigo ();
Begin
graph=4;Size=rand(65,115); x=220; y=230; X+=inc_x; Y+=inc_y;
loop
play_wav(sonido,0);
set_wav_volume (1,20);
IF (x>320) ; END
IF (y>240) ; END
IF (collision (type bola)); BREAK ; END
end
Frame;
end
Saludos.
Buff no entiendo que quieres que haga ese proceso, pero si pretendías que se moviese, mal vas. dime que quieres que haga y a ver si lo entiendo, pero te digo, ese proceso está mal.
Buff no entiendo que quieres que haga ese proceso, pero si pretendías que se moviese, mal vas. dime que quieres que haga y a ver si lo entiendo, pero te digo, ese proceso está mal.
Process enemigo ();
Begin
graph=4;Size=rand(65,115); x=220; y=230; X+=inc_x; Y+=inc_y;
loop
play_wav(sonido,0);
set_wav_volume (1,20); //música y volumen
IF (x>320) ; END
IF (y>240) ; END
IF (collision (type bola)); BREAK ; END // que cuando choque nuestra bola con el , el enemigo desaparezca.
end
Frame;
end
He puesto lo que quiero que haga.
Posiblemente este mal , voy a repetir todo el proceso enemigo pero lo que quiero es que me lo reconozca y que la línea que he puesto antes (la del enemigo rand ... ) este bien .
Saludos.
Si quieres que te reconozca la linea simplemente quita los tres rands.
Haz la llamada al proceso de la siguiente manera
enemigo();
¿facil no?
pero te advierto que primero no compilará porque inc_x e inc_y no existen; y lo segundo es que el enemigo no se moverá y hará un estruendo del carajo.
< - >
Yo haría el proceso enemigo así:
Process enemigo (int x, int inc_x, int inc_y);
Begin
graph=4;
Size=rand(65,115);
loop
x+=inc_x;
y+=inc_y;
IF (x>330) break; END
IF (y>250) break; END
IF (x<-10) break; END
IF (y<-10) break; END
IF (collision (type bola)) play_wav(sonido,0); frame; break; END
Frame;
end
end
Y lo llamaría así si quisiera que fuese de arriba a abajo
enemigo(rand(0,320), -9, 0, rand(1,10));
Y lo llamaría así si quisiera que fuese de izquierda a derecha
enemigo(-9, rand(0,240), rand(1,10), 0);
Y bueno, variando los parámetros podrías obtener muchos resultados.
Kiwiz, necesitas parar un momento y buscar algún curso básico de programación que te clarifique las reglas comunes. Aunque leyendo algún curso básico te parezca que pierdes el tiempo escribiendo "hola" o la tabla de 5 en la pantalla, en realidad te falta tanta base que es ahora cuando realmente estás perdiendo tiempo...
+1 juanvvc
Es una verdad como un templo lo que has dicho.
En este caso, repasar todo lo referente a procedimientos y funciones.
Bueno, es hora de hablar del estupendo manual de 500 páginas de Oscar Torrente sobre programación en Fénix (que quizás sirva para aprender programación) :)
Si tienes prisas, el mío quizás te venga mejor :D:D:D:D
Ambos andan por fenixworld.se32.com, y la última versión de Osk actualizada creo que andaba en los últimos fenixpack.
EDIT: Ups, olvidaba que fenixworld al final compró el dominio www.fenixworld.com :D
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.