Tutoriels PSP – Créer un menu simple avec la LibGE

NulPassableMoyenBienTrés bien (2 votes, average: 5,00 out of 5)
Loading ... Loading ...
tutopsp

Continuons nos tutoriels sur l’apprentissage à la programmation en C sur PSP, avec un tutoriel qui va vous apprendre ici à créer un menu tout simple. N’hésitez pas à aller sur le forum dans la section « Tutoriels des membres » pour voir comment on peut créer un menu d’une autre façon.

Prêt ? Partez !

 

 

Tout d’abord nous aurons besoin de quelques images pour notre tutoriel.

Un fond :

Et des curseurs droit et gauche :

Voilà nous avons tout ce dont nous avons besoin graphiquement pour réaliser notre menu. Maintenant, place à la programmation :-)

Tout d’abord, les includes et les infos de la PSP (comme d’habitude) :

#include <stdio.h>
#include <stdlib.h>
#include <libge/libge.h>

PSP_MODULE_INFO("Menu_PSdev", 0, 0, 0);
PSP_HEAP_SIZE_KB(512);

Nous allons ouvrir notre fonction principale et initialiser la LibGE :

int main(int argc, char *argv[])
{
    geInit();

Maintenant, on charge nos trois images :

ge_Image* back = geLoadImage("fond.png");
ge_Image* curs1 = geLoadImage("fleche_g.png");
ge_Image* curs2 = geLoadImage("fleche_d.png");

Nous déclarons deux entiers : selecteur et maxselecteur que nous initialisons respectivement à 1 et à 3. Puis on déclare deux variable pour l’utilisation des touches de la PSP, pad et oldpad.

int selecteur = 1, maxselecteur = 3;
ge_Keys *pad = geCreateKeys(), *oldpad = geCreateKeys();

On peut maintenant ouvrir notre boucle infini :

while (1)
{

On appelle nos fonctions et on affiche notre back:

geClearScreen();
geReadKeys(pad); //Pour activer le pad
geDrawImage(0, 0, back);

Le principe est simple, nous allons dire à notre programme, si j’appuie sur la flèche du bas je descend les curseurs vers le bas, si j’appuie sur la flèche de haut je monte les curseurs. Si je suis tout en bas et que j’appuie sur la flèche de bas, les curseurs monte tout en haut et vis versa.

Voici ce que ça donne en programmation avec la LibGE :

if(pad->pressed[GEK_DOWN] && !oldpad->pressed[GEK_DOWN])
{
    selecteur++;
}
if(pad->pressed[GEK_UP] && !oldpad->pressed[GEK_UP])
{
    selecteur--;
}
if (selecteur > maxselecteur)
{
    selecteur = 1;
}
else if (selecteur < 1)
{
    selecteur = maxselecteur;
}

Voici la structure, selon la touche haut ou bas, on incrémente ou on décrémente la variable selecteur. Puis si on depasse la valeur de la variable maxselecteur qui est de 3, alors on remonte en haut.

Nous allons afficher les curseurs :

if (selecteur == 1) {
    geDrawImage(185, 130, curs1);
    geDrawImage(275, 130, curs2);
}
if (selecteur == 2){
    geDrawImage(170, 160, curs1);
    geDrawImage(285, 160, curs2);
}
if (selecteur == 3){
    geDrawImage(185, 189, curs1);
    geDrawImage(275, 189, curs2);
}

La position des curseurs dépend bien évidement à la position des écritures sur l’image.

Pour finir, on met nos conditions par rapport à la position de nos sélecteurs : si slecteur == 1 alors on fait ça, si == 2 on fait ça, etc..
Ici j’ai mis l’action de quitter le jeu quand on appuie sur croix et que selecteur == 3

if(pad->pressed[GEK_CROSS] && !oldpad->pressed[GEK_CROSS] && selecteur == 1){
 
}
if(pad->pressed[GEK_CROSS] && !oldpad->pressed[GEK_CROSS] && selecteur == 2){

}
if(pad->pressed[GEK_CROSS] && !oldpad->pressed[GEK_CROSS] && selecteur == 3){
    sceKernelExitGame();
}

Pour avoir un curseur qui marche à l’appuie de la touche et non pas qui s’incrémente quand on appuie sur le bouton (c’est français ce que je dis ?), on utilise l’autre variable déclarée plus haut.
En gros l’oldpad sert à dire : Si on appuie sur croix, et qu’on appuyait pas sur croix au tour précèdent alors ..

On appelle donc notre fonction puis celle du buffer et on ferme la boucle infini :

geReadKeys(oldpad);
geSwapBuffers();
}

On ferme notre boucle principale :

sceKernelExitGame();
return 0;
}

Voilà notre programme est terminé et nous avons un beau menu !

Parce que je suis gentil, je vous donne le programme entier :

#include <stdio.h>
#include <stdlib.h>
#include <libge/libge.h>

PSP_MODULE_INFO("Menu_Titotuto", 0, 0, 0);
PSP_HEAP_SIZE_KB(512);


int main(int argc, char *argv[])
{

    geInit();

    ge_Image* back = geLoadImage("fond.png");
    ge_Image* curs1 = geLoadImage("fleche_g.png");
    ge_Image* curs2 = geLoadImage("fleche_d.png");

    int selecteur = 1, maxselecteur = 3;
    ge_Keys *pad = geCreateKeys(), *oldpad = geCreateKeys();
   
    while (1)
    {
        geClearScreen();
        geReadKeys(pad);
        geDrawImage(0, 0, back);

        if(pad->pressed[GEK_DOWN] && !oldpad->pressed[GEK_DOWN])
        {
            selecteur++;
        }
        if(pad->pressed[GEK_UP] && !oldpad->pressed[GEK_UP])
        {
            selecteur--;
        }
        if (selecteur > maxselecteur)
        {
           selecteur = 1;
        }
        else if (selecteur < 1)
        {
           selecteur = maxselecteur;
        }

        if (selecteur == 1)
        {
           geDrawImage(185, 130, curs1);
           geDrawImage(275, 130, curs2);
        }
        if (selecteur == 2)
        {
           geDrawImage(170, 160, curs1);
           geDrawImage(285, 160, curs2);
        }
        if (selecteur == 3)
        {
           geDrawImage(185, 189, curs1);
           geDrawImage(275, 189, curs2);
        }      
       
        if(pad->pressed[GEK_CROSS] && !oldpad->pressed[GEK_CROSS] && selecteur == 1){
 
        }
        if(pad->pressed[GEK_CROSS] && !oldpad->pressed[GEK_CROSS] && selecteur == 2){

        }
        if(pad->pressed[GEK_CROSS] && !oldpad->pressed[GEK_CROSS] && selecteur == 3){
          sceKernelExitGame();
        }
             
             
        geReadKeys(oldpad);
        geSwapBuffers();
    }

    sceKernelExitGame();
    return 0;

}

Et le Makefile (comme d’habitude)

TARGET = LibGE
OBJS = main.o

CFLAGS = -O2 -G0 -Wall -DPSPFW3xx
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

LIBS = -lge -lfreetype -lpspmp3 -lm

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Menu Titotuto

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

 

Commentez ce tutoriel ICI >>

 

Powered by PSdev.fr | Partenaires : KdoUSB.com - Boutique en ligne de gadgets USB