Pahcixam
22/05/2007, 18h13
Bonjour à tous,
après une longue abscence je me relance dans le dev pour psp.
J'ai repris mon developpement du mastermind comme premier projet.
Je me heurte malheureusement un problème plus algorythmique que technique. Je met le code en dessous. Mon problème est que lorsque que je selectionne une option du menu, mon ecran alterne très rapidement le menu et l'écran que je souhaite afficher, sauf si je maintient un peu plus longtemps la croix. Chose bisard, car je n'ai pas d'attribut held dans mon code. Dernière chose, je ne sais pas comment faire pour que lorsque que je suis dans l'écran qui suis la sélection d'une option, on ne puisse plus continuer à selectionner une option à l'aveuglette (car quand on appuit sur bas ou haut puis croix, on change d'écran).
Voilà, donc j'ai un gros problème algorythmique, je pensais mettre le menu dans une fonction mais j'ai aucune idée de comment ^^.
Merci d'avance.
//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);
//On defini nos variables
int menu_compteur = 1, in_game = 0;
//definition des pointeurs vers nos images
OSL_IMAGE *menu;
int main()
{
//Initialisation de la librairie
oslInit(0);
//Initialisation du mode graphique
oslInitGfx(OSL_PF_8888, 1);
//Initialisation de la console
oslInitConsole();
//definition de la transparence
oslSetTransparentColor(RGB(255,0,255));
//chargement de nos images (oui, le "loading" :p)
menu = oslLoadImageFile("menu.png", OSL_IN_RAM, OSL_PF_5551);
//plus de transparence
oslDisableTransparentColor();
//vérification
if (!menu)
oslDebug("Impossible de charger un ou plusieurs fichiers. Verifiez que tous les fichiers sont bien copiés dans le répertoire du jeu.");
//boucle principale
while (!osl_quit)
{
//Permet de dessiner
oslStartDrawing();
//Lit les touches
oslReadKeys();
//On s'occupe de la voie à suivre si le monsieur choisi une option avec la croix
if (osl_keys->pressed.cross && menu_compteur>0 && menu_compteur<4)
{
in_game = 1;
//Selon la valeur du compteur on va afficher differentes choses
if(menu_compteur==1)
{
//efface l'écran
oslCls();
oslPrintf("La partie solo est en cours de developpement.");
if (osl_keys->pressed.circle) in_game = 0;
}
if(menu_compteur==2)
{
//efface l'écran
oslCls();
oslPrintf("La partie multijoueur est en cours de developpement.");
}
if(menu_compteur==3)
{
//efface l'écran
oslCls();
osl_quit=1;
}
}
//dessine nos images
if(in_game==0) oslDrawImage(menu);
//On affiche le texte du menu
if(menu_compteur==1 && in_game==0)
{
oslSetTextColor(RGBA(255,0,0,255));
oslPrintf_xy(260, 110, "Commencer une partie solo");
oslSetTextColor(RGBA(255,255,255,255));
oslPrintf_xy(240, 120, "Commencer une partie multijoueur");
oslPrintf_xy(310, 130, "Quittez");
}
if(menu_compteur==2 && in_game==0)
{
oslSetTextColor(RGBA(255,255,255,255));
oslPrintf_xy(260, 110, "Commencer une partie solo");
oslSetTextColor(RGBA(255,0,0,255));
oslPrintf_xy(240, 120, "Commencer une partie multijoueur");
oslSetTextColor(RGBA(255,255,255,255));
oslPrintf_xy(310, 130, "Quittez");
}
if(menu_compteur==3 && in_game==0)
{
oslSetTextColor(RGBA(255,255,255,255));
oslPrintf_xy(260, 110, "Commencer une partie solo");
oslPrintf_xy(240, 120, "Commencer une partie multijoueur");
oslSetTextColor(RGBA(255,0,0,255));
oslPrintf_xy(310, 130, "Quittez");
}
//On regarde ce que tape le monsieur pour afficher le menu en conséquence
if (osl_keys->pressed.down) menu_compteur++;
if (osl_keys->pressed.up) menu_compteur--;
//On s'arrange pour pas que le compteur dépasse les options possible
if (menu_compteur>3) menu_compteur=1;
if (menu_compteur<1) menu_compteur=3;
//Fin du dessin
oslEndDrawing();
//Synchronise l'écran
oslSyncFrame();
}
//on quitte l'application
oslEndGfx();
oslQuit();
return 0;
}
après une longue abscence je me relance dans le dev pour psp.
J'ai repris mon developpement du mastermind comme premier projet.
Je me heurte malheureusement un problème plus algorythmique que technique. Je met le code en dessous. Mon problème est que lorsque que je selectionne une option du menu, mon ecran alterne très rapidement le menu et l'écran que je souhaite afficher, sauf si je maintient un peu plus longtemps la croix. Chose bisard, car je n'ai pas d'attribut held dans mon code. Dernière chose, je ne sais pas comment faire pour que lorsque que je suis dans l'écran qui suis la sélection d'une option, on ne puisse plus continuer à selectionner une option à l'aveuglette (car quand on appuit sur bas ou haut puis croix, on change d'écran).
Voilà, donc j'ai un gros problème algorythmique, je pensais mettre le menu dans une fonction mais j'ai aucune idée de comment ^^.
Merci d'avance.
//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);
//On defini nos variables
int menu_compteur = 1, in_game = 0;
//definition des pointeurs vers nos images
OSL_IMAGE *menu;
int main()
{
//Initialisation de la librairie
oslInit(0);
//Initialisation du mode graphique
oslInitGfx(OSL_PF_8888, 1);
//Initialisation de la console
oslInitConsole();
//definition de la transparence
oslSetTransparentColor(RGB(255,0,255));
//chargement de nos images (oui, le "loading" :p)
menu = oslLoadImageFile("menu.png", OSL_IN_RAM, OSL_PF_5551);
//plus de transparence
oslDisableTransparentColor();
//vérification
if (!menu)
oslDebug("Impossible de charger un ou plusieurs fichiers. Verifiez que tous les fichiers sont bien copiés dans le répertoire du jeu.");
//boucle principale
while (!osl_quit)
{
//Permet de dessiner
oslStartDrawing();
//Lit les touches
oslReadKeys();
//On s'occupe de la voie à suivre si le monsieur choisi une option avec la croix
if (osl_keys->pressed.cross && menu_compteur>0 && menu_compteur<4)
{
in_game = 1;
//Selon la valeur du compteur on va afficher differentes choses
if(menu_compteur==1)
{
//efface l'écran
oslCls();
oslPrintf("La partie solo est en cours de developpement.");
if (osl_keys->pressed.circle) in_game = 0;
}
if(menu_compteur==2)
{
//efface l'écran
oslCls();
oslPrintf("La partie multijoueur est en cours de developpement.");
}
if(menu_compteur==3)
{
//efface l'écran
oslCls();
osl_quit=1;
}
}
//dessine nos images
if(in_game==0) oslDrawImage(menu);
//On affiche le texte du menu
if(menu_compteur==1 && in_game==0)
{
oslSetTextColor(RGBA(255,0,0,255));
oslPrintf_xy(260, 110, "Commencer une partie solo");
oslSetTextColor(RGBA(255,255,255,255));
oslPrintf_xy(240, 120, "Commencer une partie multijoueur");
oslPrintf_xy(310, 130, "Quittez");
}
if(menu_compteur==2 && in_game==0)
{
oslSetTextColor(RGBA(255,255,255,255));
oslPrintf_xy(260, 110, "Commencer une partie solo");
oslSetTextColor(RGBA(255,0,0,255));
oslPrintf_xy(240, 120, "Commencer une partie multijoueur");
oslSetTextColor(RGBA(255,255,255,255));
oslPrintf_xy(310, 130, "Quittez");
}
if(menu_compteur==3 && in_game==0)
{
oslSetTextColor(RGBA(255,255,255,255));
oslPrintf_xy(260, 110, "Commencer une partie solo");
oslPrintf_xy(240, 120, "Commencer une partie multijoueur");
oslSetTextColor(RGBA(255,0,0,255));
oslPrintf_xy(310, 130, "Quittez");
}
//On regarde ce que tape le monsieur pour afficher le menu en conséquence
if (osl_keys->pressed.down) menu_compteur++;
if (osl_keys->pressed.up) menu_compteur--;
//On s'arrange pour pas que le compteur dépasse les options possible
if (menu_compteur>3) menu_compteur=1;
if (menu_compteur<1) menu_compteur=3;
//Fin du dessin
oslEndDrawing();
//Synchronise l'écran
oslSyncFrame();
}
//on quitte l'application
oslEndGfx();
oslQuit();
return 0;
}