Bon comme j'ai le temps ce soir, voici un petite mise en route pour qui voudrait se lancer dans fenix. si ca peut servir:
tout programme commence par PROGRAM et le nom du programme:
PROGRAM mon_jeu; (c'est un point virgule
on déclare ensuite les variables globales, variables utilisés dans tout le programme
GLOBAL
int ma_variable_1;
int ma variable_2;
END
suit la boucle principale qui commence par BEGIN et se termine par END et dans laquelle on va placer le code.
BEGIN
tout mon code
END
On va par exemple y inclure en premier les fonctions pour créer un affichage sur la gp2X ex :
BEGIN
// initialisation de l'écran
set_mode(320,240,16);
set_fps(0,0);
END
les commentaires se place dans le code précédés de // pour des blocs plus important on peu utilisé /* mon commentaire */ comme en C
set_mode est la fonction créant l'affichage. 320,240 correspond à 320 par 240 pixels soit la résolution de la gp2X. 16 pour indiquer quon travaille avec des couleurs 16 bits.
set_fps permet de fixer le nombre de fps et le frameskip si il doit y en avoir un. par défaut, si on ne met pas la fonction, le fps est fixé à 25 frame par seconde et 0 frameskip. le mettre à 0 permet de tourner avec le framerate maximum.
Si on a créé un fichier .fpg, on peut par exemple de charger à la suite. imaginons le cas suivant, un programme qui affiche l'image d'intro de votre jeu, joue une chanson son,écrit un message à l'écran et attends que l'utilisateur appuie sur start et joue un son pour continuer . si c'est fait, on passe à l'écran de jeu.
Au préalable, on fait un fichier .fpg qui contient l'image d'intro . On va déclarer des variables pour stocker le fpg, la chanson et le son. ce n'est pas obligatoire, il existe différentes façon de procédés, notamment pour les images. pour moi c'est plus simple de procéder comme ça, surtout si on doit travailler avec beaucoup d'images et de sons.
Voici le bout de code commentés. ( a tester et vérifier, j'écris ça sans avec flamebird et fenix sous la main
PROGRAM mon_jeu; // jusqu'ici tout va bien
GLOBAL
int mon_fpg;
int mon_son;
int ma_chanson;
END
BEGIN
// initialisation de l'écran
set_mode(320,240,16);
set_fps(30,0);
mon_fpg=load_fpg("chemin/vers/mon/fichier/mon_fpg.fpg"); // on charge le fichier fpg en mémoire avec la fonction load_fpg
mon_son=load_wav("chemin/vers/mon/son/mon_son.wav"): // on charge le son avec load_wav
ma_chanson=load_song("chemin/vers/ma/chanson/ma_chanson.ogg); // on charge la chanson avec load_song, le fichicer est donc en .ogg
put_screen(mon_fpg,1); // on affiche en fond d'écran l'image n° 1 de notre fichier fpg
play_song(ma_chanson,-1); // on joue la chanson chargée et stockée dans la variable ma chanson. l
// le chiffre correspond au nombre de répétition, 0 pour une fois, 1 pour la jouer 2 fois...... et -1 pour la jouer en boucle
write(0,160,150,1,"Press Start"); // write permet d'écrire à l'écran, 0 c'est l'id du texte, 160, 150 les coordonnées x et y, 1 l'alignement du texte et "Press Start" le texte à afficher
frame; // très important, frame; demande au programme d'afficher à l'écran ce qui vient d'etre préparé. si on l'avais oublié, on aurai entendu le son mais pas vu l'image.
// si on lance le prorgamme maintenant, on va se rendre compte que le son ets joué l'image affiché et que le programme s'arrete, on va donc créer une boucle avec deux actions
// si on appuie sur start, on sort de la boucle et on poursuit le programme
// si on appuie select on quitte le programme. ( et ca c'est super important !!!! )
// il existe comme dans tout langage plusieurs type de boucle. ici on va utilisé une simple loop car on n'a pas de conditions d'execution particulière donc :
LOOP
IF (key(_enter)) // si on appuie sur start... ( _enter correspond au start de la console)
play_wav(mon_son,0); // ... on joue le son une fois et ......
break; // .... on sort de la boucle. break permet de sortir de la boucle et donc d'exécuter la suite du programme.
END
IF (key(_space))
exit;
END
frame; je rajoute un frame ici, dans le cas ou par exemple à l'interieur de la boucle on avait demandé au programme d'effectuer des actions sur les graphismes genre sprites sui bougent, texte qui clignote.
END // fin de la boucle
// si on a appuyé sur start on se retrouve donc ici mais l'écran contient toujours des informations. on peut nettoyer le tout en utilisant clear_screen()
// c'est pas forcemment utile car il y a de grandes chances qu'on demande maintenant au programme d'afficher une autre image en fond. placée par exemple dans un autre fichier fpg
// je préfère bien séparé les fpg pour les raisons qui vont suivre..
// si tel est le cas il faudra néanmoins effacer le texte sinon il restera affiché soit :
delete_texte(0); // on efface le texte dont l'id est 0
// la gp2x étant limité en mémoire, prenez l'habitude de décharger de celle-ci ce qui ne sert plus ( d'ou la multiplication des fichiers fpg ) c'est pas utile pour un petit jeu mais on sait jamais
unload_song(ma_chanson); // décharge la chanson et l'arrete par la même occasion,
unload_fpg(mon_fpg); // même chose pour le fpg
// on poursuit ensuite le programme, par exemple en chargeant un nouveau fpg et en affichant une image.. en lancant un process...
END // super important, il indique la fin du programme.
voili voilou soit le code suivant sans les comentaires :
PROGRAM mon_jeu;
GLOBAL
int mon_fpg;
int mon_son;
int ma_chanson;
END
BEGIN
set_mode(320,240,16);
set_fps(30,0);
mon_fpg=load_fpg("chemin/vers/mon/fichier/mon_fpg.fpg");
mon_son=load_wav("chemin/vers/mon/son/mon_son.wav"):
ma_chanson=load_song("chemin/vers/ma/chanson/ma_chanson.ogg);
put_screen(mon_fpg,1);
play_song(ma_chanson,-1);
write(0,160,150,1,"Press Start");
frame;
LOOP
IF (key(_enter))
play_wav(mon_son,0);
break;
END
IF (key(_space))
exit;
END
frame;
END
delete_texte(0);
unload_song(ma_chanson);
unload_fpg(mon_fpg);
END
voilà, en espérant que cela puisse donner envie de s'essayer un peu à fenix. c'est super accessible même pour les non programmeurs
Bon là évidement il n'y a pas grand chose, des que je trouve le temps je complèterai un peu en parlant des process. un process est un ensemble d'action qu'on appelle dans notre programme. ils sont crées dans le fichier prg mais hors de la boucle principale. on peut par exemple créer un process pour l'affichage et le déplacement du héros de notre jeu et un autre pour afficher les ennemis.
Bon code à tous !!
EDIT : le code est normalement indenté mais ça passe pas
