Yodajr
10/04/2006, 02h12
Jour 3 : Gestion des touches
Après avoir vu comment afficher du texte, la prochaine étape est de maitriser l'interface boutons/joystick/joypad de notre PSP :)
1) Le code
//La librairie principale OSLib
#include <oslib/oslib.h>
//les callbacks
PSP_MODULE_INFO("OSLib Sample", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
int main()
{
//Initialisation de la librairie
oslInit(0);
//Initialisation du mode graphique
oslInitGfx(OSL_PF_8888, 1);
//Initialisation de la console texte
oslInitConsole();
//boucle principale
while (!osl_quit)
{
//Permet de dessiner
oslStartDrawing();
//Lit les touches
oslReadKeys();
//efface l'écran
oslCls();
if (osl_keys->held.down) oslPrintf("Vous appuyez Bas");
if (osl_keys->held.up) oslPrintf("Vous appuyez Haut");
if (osl_keys->held.left) oslPrintf("Vous appuyez Gauche");
if (osl_keys->held.right) oslPrintf("Vous appuyez Droite");
oslPrintf_xy(0,15,"Valeur joystick X : %d",osl_keys->analogX);
oslPrintf_xy(0,25,"Valeur joystick Y : %d",osl_keys->analogY);
//Fin du dessin
oslEndDrawing();
//Synchronise l'écran
oslSyncFrame();
}
//on quitte l'application
oslEndGfx();
oslQuit();
return 0;
}
2) Explications
oslInitGfx(OSL_PF_8888, 1);
Même chose que le jour 1, sauf qu'ici on utilise le double buffering.
oslInitConsole();
N'oubliez pas d'appeler cette commande à chaque fois que vous voudrez afficher du texte, et SURTOUT ne la placez pas avant l'appel à oslInitGfx, sinon gare au... plantage ! (et non, pas de gorille ici)
oslStartDrawing();
A appeler à chaque fois que vous voulez dessiner sur l'écran. Attention, veillez à bien l'appeler à chaque frame et avant chaque opération de dessin, sinon ca plante ;)
oslReadKeys();
Lit l'ensemble des touches et stocke dans la structure globale osl_keys. Veillez également à appeler cette commande avant le moindre test de touche.
osl_keys- >held.down
On exploite ici la lecture des touches effectuée plus tôt.
La syntaxe pour les touches et le joypad est toujours la même : "osl_keys- >" suivi de :
a. held ou pressed : les 2 états exploitables des differentes touches. Held pour quand la touche est maintenue et Pressed pour quand la touche vient juste d'etre pressée.
b. Le nom de la touche :
Haut > up
Bas > down
Gauche > left
Droite > right
Croix > cross
Carré > square
Triangle > triangle
Rond > circle
L > L
R > R
Home > home
Style > note
Select > select
Start > start
Hold > hold
Et pour le joystick : "osl_keys- >" suivi de analogX pour le débattement horizontal et analogY pour le débattement vertical.
oslEndDrawing();
Tout comme oslStartDrawing, elle est à appeler à chaque frame et à la fin de toutes les opérations de dessin.
oslSyncFrame();
A appeler à chaque frame également. Très utile dans notre utilisation du double buffering, cette fonction se charge de basculer les buffers, attendre la VSync, etc...
3) Screen et eboot
Voila, vous devez obtenir un truc comme ça :
http://hothmoon.free.fr/psp/dev/jour03_screen.png
Téléchargez l'eboot compilée pour 1.5 ici (http://hothmoon.free.fr/psp/dev/jour03_eboot.zip)
Après avoir vu comment afficher du texte, la prochaine étape est de maitriser l'interface boutons/joystick/joypad de notre PSP :)
1) Le code
//La librairie principale OSLib
#include <oslib/oslib.h>
//les callbacks
PSP_MODULE_INFO("OSLib Sample", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
int main()
{
//Initialisation de la librairie
oslInit(0);
//Initialisation du mode graphique
oslInitGfx(OSL_PF_8888, 1);
//Initialisation de la console texte
oslInitConsole();
//boucle principale
while (!osl_quit)
{
//Permet de dessiner
oslStartDrawing();
//Lit les touches
oslReadKeys();
//efface l'écran
oslCls();
if (osl_keys->held.down) oslPrintf("Vous appuyez Bas");
if (osl_keys->held.up) oslPrintf("Vous appuyez Haut");
if (osl_keys->held.left) oslPrintf("Vous appuyez Gauche");
if (osl_keys->held.right) oslPrintf("Vous appuyez Droite");
oslPrintf_xy(0,15,"Valeur joystick X : %d",osl_keys->analogX);
oslPrintf_xy(0,25,"Valeur joystick Y : %d",osl_keys->analogY);
//Fin du dessin
oslEndDrawing();
//Synchronise l'écran
oslSyncFrame();
}
//on quitte l'application
oslEndGfx();
oslQuit();
return 0;
}
2) Explications
oslInitGfx(OSL_PF_8888, 1);
Même chose que le jour 1, sauf qu'ici on utilise le double buffering.
oslInitConsole();
N'oubliez pas d'appeler cette commande à chaque fois que vous voudrez afficher du texte, et SURTOUT ne la placez pas avant l'appel à oslInitGfx, sinon gare au... plantage ! (et non, pas de gorille ici)
oslStartDrawing();
A appeler à chaque fois que vous voulez dessiner sur l'écran. Attention, veillez à bien l'appeler à chaque frame et avant chaque opération de dessin, sinon ca plante ;)
oslReadKeys();
Lit l'ensemble des touches et stocke dans la structure globale osl_keys. Veillez également à appeler cette commande avant le moindre test de touche.
osl_keys- >held.down
On exploite ici la lecture des touches effectuée plus tôt.
La syntaxe pour les touches et le joypad est toujours la même : "osl_keys- >" suivi de :
a. held ou pressed : les 2 états exploitables des differentes touches. Held pour quand la touche est maintenue et Pressed pour quand la touche vient juste d'etre pressée.
b. Le nom de la touche :
Haut > up
Bas > down
Gauche > left
Droite > right
Croix > cross
Carré > square
Triangle > triangle
Rond > circle
L > L
R > R
Home > home
Style > note
Select > select
Start > start
Hold > hold
Et pour le joystick : "osl_keys- >" suivi de analogX pour le débattement horizontal et analogY pour le débattement vertical.
oslEndDrawing();
Tout comme oslStartDrawing, elle est à appeler à chaque frame et à la fin de toutes les opérations de dessin.
oslSyncFrame();
A appeler à chaque frame également. Très utile dans notre utilisation du double buffering, cette fonction se charge de basculer les buffers, attendre la VSync, etc...
3) Screen et eboot
Voila, vous devez obtenir un truc comme ça :
http://hothmoon.free.fr/psp/dev/jour03_screen.png
Téléchargez l'eboot compilée pour 1.5 ici (http://hothmoon.free.fr/psp/dev/jour03_eboot.zip)