djbneben
Messages postés8Date d'inscriptionmercredi 21 février 2007StatutMembreDernière intervention 6 janvier 2010
-
5 janv. 2010 à 22:53
djbneben
Messages postés8Date d'inscriptionmercredi 21 février 2007StatutMembreDernière intervention 6 janvier 2010
-
6 janv. 2010 à 16:14
salut tout le monde,
en ce moment je programme un menu, qui sera utiliser dasn mes futurs jeux!
donc je vous décris ce que je me suis dis : j'ai crée une classe "menu" qui gère tout le menu, puis une classe "bouton" qui permet de crée des bouton au lancement du jeux (nouvelle partie, charger...), puis une classe "window" pour créer des fenetre. Donc en gros, le menu -contient- des boutons et -contient- des fenetres.
En code j'ai fait ca (j'ai enlevé ce qui sert a rien ici):
class menu
{
private:
bouton *ClicTextNewGame;
window *NewGameWindow;
}
puis dans le constructeur de "menu"
ClicTextNewGame = new bouton;
NewGameWindow = new window;
Dans une methode de "menu" qui est appelé au lancement du jeu, je crée donc un bouton pour lancer une nouvelle partie, puis je crée une fenêtre qui sera pas affichée pour le moment.
Ensuite dans la boucle d'affichage du menu, je test si le curseur est sur le bouton, puis si on clic:
void bouton::cliquableText(std::string text, int posX, int posY)
{
// récupère la taille en pixel de la chaine (X et Y)
int pixelSizeOfText_X = dbTextWidth((char*) text.c_str());
int pixelSizeOfText_Y = dbTextHeight((char*) text.c_str());
// on voit si le curseur passe sur le texte
if (dbMouseX()>posX & dbMouseX()posY & dbMouseY()afficherFenetre();
mais je ne peux pas utiliser mon objet (mauvaise portée...)
djbneben
Messages postés8Date d'inscriptionmercredi 21 février 2007StatutMembreDernière intervention 6 janvier 2010 6 janv. 2010 à 09:56
Merci pour ta réponse! J'avais déja essayé ca sur un autre programme, mais je n'ai pas compris pq, ca planté aléatoirement dans le jeu après...
Mais la je vais essayer une ptite modif, parceque le soucis, c'est qu'a l'endrois ou je veux mettre :
NewGameWindow->afficherFenetre();
one ne passe qu'une seule fois (lors du clic!) mais ca ne peux pas marcher parceque ce type de programmation a besoin d'être rafraichi a chaque boucle (la fenetre doit etre continuellement affiché, et pas qu'une seule fois sinon elle sera affichée que la 1ere boucle!). Donc je pensé mettre un bool de menu a TRUE puis verifier avec la classe "Window" ce que vaut ce bool, et afficher en conséquence!
Je vous tiens au jus, et je posterais un ptit appercu :)
djbneben
Messages postés8Date d'inscriptionmercredi 21 février 2007StatutMembreDernière intervention 6 janvier 2010 6 janv. 2010 à 11:16
voila de retour!
Donc j'ai utilisé ce que aardman a dis, j'ai fais ca:
void bouton::cliquableText(std::string text, int posX, int posY, window* windowObj)
{
// récupère la taille en pixel de la chaine (X et Y)
int pixelSizeOfText_X = dbTextWidth((char*) text.c_str());
int pixelSizeOfText_Y = dbTextHeight((char*) text.c_str());
// on voit si le curseur passe sur le texte
if (dbMouseX()>posX & dbMouseX()posY & dbMouseY()changeToShowWindow();
}
}
else
{
dbInk( dbRGB (m_baseColorText_R,m_baseColorText_G,m_baseColorText_B),0);
}
dbText(posX, posY,(char*) text.c_str());
}
Ca marche mais je sais pas si c'est bien comme ca... La fonction "changeToShowWindow()" met un bool a TRUE, puis dans ma boucle principale je test ce que vaut ce bool, dans ce cas la ca marche!
Pour fermer une fenetre, cliquer n'importe ou a droite de l'écran, pous quitter faire echap, pous modifier le menu, aller dans Config.ini qui est dans le dossier BIN!