Lien entre classes...

djbneben Messages postés 8 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 6 janvier 2010 - 5 janv. 2010 à 22:53
djbneben Messages postés 8 Date d'inscription mercredi 21 février 2007 Statut Membre Derniè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:
ClicTextNewGame->cliquableText("Nouvelle Partie",100,400);

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...)

Comment je dois faire ?

4 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
6 janv. 2010 à 03:28
Salut,
A priori tu ne peux pas, NewGameWindow est un membre de menu, pas de bouton.
Pourquoi tu ne passes pas ton window* en param à cliquableText() ?
0
djbneben Messages postés 8 Date d'inscription mercredi 21 février 2007 Statut Membre Derniè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 :)
0
djbneben Messages postés 8 Date d'inscription mercredi 21 février 2007 Statut Membre Derniè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!

Mais la syntaxe est elle bonne ?
0
djbneben Messages postés 8 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 6 janvier 2010
6 janv. 2010 à 16:14
bon finalement... J'ai fait un bool, je test si ce bool est a TRUE et j'affiche; pour plus de précision je mes mes sources, et un EXE:

Tapez le texte de l'url ici.

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!

Dites m'en des news :)
0
Rejoignez-nous