IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SFML Discussion :

Dessiner un objet dans lui même ? [SFML 2.0]


Sujet :

SFML

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    décembre 2014
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2014
    Messages : 68
    Points : 16
    Points
    16
    Par défaut Dessiner un objet dans lui même ?
    Bonjour à tous.

    Je vous expliques brièvement mon problème :

    J'ai une classe "NouveauPerso", et je l'ai configurée en drawable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class NouveauPerso: public sf::Drawable, public sf::Transformable...
    J'aimerais savoir si il est possible au sein même de cette classe de la dessiner elle même ???

    J'ai essayé différents codes mais je ne trouve pas....

    Voici une partie du code (voir ligne 23)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    void NouveauPerso::nouveauPerso()
    {
    	unsigned short int choixJoueur(0);
    
    	choixJoueur = nouveauPseudo();
    
    	while (!Pentrée->quitter())
    	{
    		Pentrée->updateEvenements();
    
    		if (Pentrée->getTouche(sf::Keyboard::Key::Escape))
    			break;
    
    		choixJoueur = nouveauPseudo();
    
    		if (choixJoueur == 1)
    		{
    			saveGame.setSauvegarde(pseudoJoueurStr, choixPerso);
    		}
    		else if (choixJoueur == 0)
    			break;
    
    		Pwindow->draw(ME ?);
    		Pwindow->display();
    		Pwindow->clear();
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void NouveauPerso::draw(sf::RenderTarget & target, sf::RenderStates states) const
    {
    	// on applique la transformation
    	states.transform *= getTransform();
     
    	// et on dessine.
    	target.draw(pseudoJoueurTxt, states);
    	target.draw(choixPersonnageTxt, states);
    	target.draw(persoMarioSprite, states);
    	target.draw(persoLuigiSprite, states);
    	target.draw(validerTxt);
    	target.draw(annulerTxt);
    	target.draw(Pentrée->getCustomCurseur().getSpriteCurseur(CURSEUR_STD));
    }

    Par avance merci de votre aide.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    25 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 25 903
    Points : 207 396
    Points
    207 396
    Billets dans le blog
    85
    Par défaut
    Bonjour,

    Moi, j'aurai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NouveauPerso myPerso;
    myPerso.draw();
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Expert éminent sénior

    Profil pro
    Développeur informatique
    Inscrit en
    novembre 2006
    Messages
    7 454
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2006
    Messages : 7 454
    Points : 17 367
    Points
    17 367
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Pentrée->updateEvenements();
    juste une remarque je déconseille fortement de faire des déclarations de variables ou fonctions avec des accents..!
    car si tu passes sous un autre environnement de développement et que ça ne fonctionne pas tu seras obligé de reprendre tout le code

  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    décembre 2014
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2014
    Messages : 68
    Points : 16
    Points
    16
    Par défaut
    Pour les accents je suis d'accord. Même si je ne pense pas développer avec une autre plateforme ou même sous une autre. C'est pour ça que je reprends tout mon code et remplace les accents par des e.

    Pour ce qui est de la réponse de litlewhite : on peux créer un objet dans l'objet en question ? Ça ne gêne pas ? C'est curieux quand même je trouves. Je vois pas encore comment gérer ca. Je me pencherais sur le problème en tous cas. Merci.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    décembre 2014
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2014
    Messages : 68
    Points : 16
    Points
    16
    Par défaut
    En fin de compte je me suis débrouillé avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    void NouveauPerso::nouveauPerso(NouveauPerso *nouveauPerso)
    {
     
    	PnouveauPerso = nouveauPerso;
     
    	unsigned short int choixJoueur(0);
     
    	choixJoueur = nouveauPseudo();
     
    	while (!Pentree->quitter())
    	{
    		Pentree->updateEvenements();
     
    		if (Pentree->getTouche(sf::Keyboard::Key::Escape))
    			break;
     
    		choixJoueur = nouveauPseudo();
     
    		if (choixJoueur == 1)
    		{
    			saveGame.setSauvegarde(pseudoJoueurStr, choixPerso);
    		}
    		else if (choixJoueur == 0)
    			break;
     
    		Pwindow->draw(*PnouveauPerso);
    		Pwindow->display();
    		Pwindow->clear();
    	}
    }
    C'est correct d'utiliser un pointeur de pointeur ?

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    25 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 25 903
    Points : 207 396
    Points
    207 396
    Billets dans le blog
    85
    Par défaut
    Créer un objet dans un objet : oui on peut.
    Je pense que le problème est plus profond. Conseil de C++ :
    • les pointeurs sont à éviter. Au pire, il y a les pointeurs intelligents.


    Conseil sur la sémantique :
    • Vous avez une classe qui s'appelle "NouveauPersonnage" ... alors qu'une classe c'est un objet, donc il semble que cela serait, dans votre cas : Personnage ;
    • vous avez une fonction NouveauPersonnage (dans la classe NouveauPersonnage) ... alors que c'est l'objectif d'un constructeur ;
    • dans votre fonction noueauPersonnage() vous faite un affichage. Pourtant, la fonction ne s'appelle pas "afficher" ou "draw()" -> Elle fait deux choses différentes (une fonction doit avoir une tâche spécifique) ;
    • vous mélangez l'anglais et le français dans le code.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    décembre 2014
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2014
    Messages : 68
    Points : 16
    Points
    16
    Par défaut
    En fait c'est un vieux code que j'avais laissé pendant 1 an au moins.
    En le relisant et faisant des commentaires pour m'y retrouver (chose que j'avais pas du tout fait) j'ai repris plein de parties du code et refait plein d'algorithmes. C'est pour ça qu'il y a des accents entre autre... Je comprends l'idée pour la sémantique. Ma classe nouveau personnage affiche en fait ma fenêtre de création d'un nouveau perso.

    Voilà pourquoi A la fin je dessine mon objet.

    Ma classe personnage elle gère l'affichage d'un personnage (sprite mouvements etc...)
    Cette façon de procéder est incorrecte ? Voulez vous plus de code pour comprendre ce que j'ai voulu faire ? Ou bien m'expliquer comment procéder du coups ?

    En tous cas merci déjà pour ces tuyaux.

    Ps : ce n'est pas mon constructeur mais une méthode. Le constructeur lui ne dessine pas. Il initialise tout ce dont j'ai besoin pour cet objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    NouveauPerso::NouveauPerso(Input *entree, sf::RenderWindow *window)
    {
    	Pentree = entree;
    	Pwindow = window;
     
    	choixPerso = 1;
     
    	tempsStd.asMilliseconds();
    	tempsTiret.asMilliseconds();
     
    	validerStr = "Valider";
    	annulerStr = "Annuler";
    	choixPersonnageStr = "Choix personnage : ";
    	pseudoJoueurStr = pseudoJoueurTmpStr = "Pseudo : ";
     
    	persoNotSelect = { 50, 50, 50, 255 };
    	persoSelect = { 255, 255, 255, 255 };
     
    	if (!policeTexteNomJoueur.loadFromFile(POLICE_PSEUDO_JOUEUR))
    	{
    		std::string messageErreur("Erreur Police Nom Joueur.");
    		erreur(messageErreur, -10);
    	}
     
    	validerTxt.setColor(sf::Color::Green);
    	validerTxt.setString(validerStr);
    	validerTxt.setFont(policeTexteNomJoueur);
    	validerTxt.setPosition(LARGEUR_FENETRE - LARGEUR_FENETRE / 3, HAUTEUR_FENETRE - HAUTEUR_FENETRE / 4);
     
    	annulerTxt.setColor(sf::Color::Red);
    	annulerTxt.setString(annulerStr);
    	annulerTxt.setFont(policeTexteNomJoueur);
    	annulerTxt.setPosition(LARGEUR_FENETRE / 5, HAUTEUR_FENETRE - HAUTEUR_FENETRE / 4);
     
    	choixPersonnageTxt.setColor(sf::Color::Blue);
    	choixPersonnageTxt.setString(choixPersonnageStr);
    	choixPersonnageTxt.setFont(policeTexteNomJoueur);
    	choixPersonnageTxt.setPosition(LARGEUR_FENETRE / 5, HAUTEUR_FENETRE / 3);
     
    	pseudoJoueurTxt.setColor(sf::Color::Red);
    	pseudoJoueurTxt.setFont(policeTexteNomJoueur);
    	pseudoJoueurTxt.setCharacterSize(TAILLE_POLICE_NV_PERSO);
    	pseudoJoueurTxt.setPosition(LARGEUR_FENETRE / 5, HAUTEUR_FENETRE / 5);
    	pseudoJoueurTxt.setString(pseudoJoueurTmpStr);
     
    	if (!persoMarioTexture.loadFromFile(IMG_SELECT_PERSO, MARIO_SELECT_RECT))
    	{
    		std::string messageErreur("Erreur Image sélection persommage.");
    		erreur(messageErreur, -11);
    	}
     
    	if (!persoLuigiTexture.loadFromFile(IMG_SELECT_PERSO, LUIGI_SELECT_RECT))
    	{
    		std::string messageErreur("Erreur Image sélection persommage.");
    		erreur(messageErreur, -11);
    	}
     
    	persoMarioSprite.setTexture(persoMarioTexture);
    	persoMarioSprite.setPosition(LARGEUR_FENETRE / 2  - 40, HAUTEUR_FENETRE / 3 - 35);
    	persoMarioSprite.scale(0.3f, 0.3f);
    	persoMarioSprite.setColor(sf::Color(255, 255, 255, 255));
     
    	persoLuigiSprite.setTexture(persoLuigiTexture);
    	persoLuigiSprite.setPosition(LARGEUR_FENETRE / 2 + 13, HAUTEUR_FENETRE / 3 - 35);
    	persoLuigiSprite.scale(0.3f, 0.3f);
    	persoLuigiSprite.setColor(sf::Color(55, 55, 55, 255));
     
    	rectValider = validerTxt.getGlobalBounds();
    	rectAnnuler = annulerTxt.getGlobalBounds();
    	rectPersoMario = persoMarioSprite.getGlobalBounds();
    	rectPersoLuigi = persoLuigiSprite.getGlobalBounds();
    }

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    25 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 25 903
    Points : 207 396
    Points
    207 396
    Billets dans le blog
    85
    Par défaut
    Du coup, sémantiquement, j'aurais appeler la classe NouveauPersoWidget, car c'est une classe pour permettre au joueur de créer un nouveau perso.
    J'aurais fait le chargement de la police dans le constructeur je pense (ou dans une fonction load), ou même dans une autre classe pour mieux respecter le principe de responsabilité unique. Là, je ne sais pas si vous appelez "NouveauPerso" en boucle, mais dans un tel cas, ça va être lourd de charger la police à chaque fois.

    Après, sémantiquement, une classe qui s'appelle Nouveau (New) et qui ne retourne rien, ça me gêne toujours un peu
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    décembre 2014
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2014
    Messages : 68
    Points : 16
    Points
    16
    Par défaut
    En fait effectivement je ne l’appelle pas en boucle.

    Dan mon main je ne l’appelle qu'une fois : (Appel du constructeur Ligne 8, Appel de la procédure nouveauPerso Ligne 40).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    int main()
    {
    	sf::RenderWindow window(sf::VideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE), "Tario Moustassou 2016"); // Création d'une fenêtre SFML de nom window,en mode vidéo, de taille LARGEUR_FENETRE et HAUTEUR_FENETRE avec l'intitulé "Tario Moustassou 2016".
    	Input entrée(&window); // Créé un objet Input (objet dans classe Input), de nom entrée avec l'adresse de la fenêtre précédement créée.
    	unsigned short int choixJoueur(0); // Créé une variable de type entier, court et positif de nom choixJoueur et de valeur 0.
    	Map mapSplashScreen(LVLSPLASHSCREEN); // Créé un objet Map (classe map) de nom mapSplashScreen, avec comme paramètre le nom du fichier contenant la map de l'écran d'accueuil.
    	Splashscreen splashScreen(&mapSplashScreen, &entrée, &window); // Créé un objet Splashscreen (classe splashscreen) de nom splashScreen, avec comme paramètres, l'adresse de la map créée précédement, un pointeur vers l'objet Input (classe input) envoyé dans la procédure, et un pointeur vers la fenêtre.
    	NouveauPerso nouveauPerso(&entrée, &window);
     
    	// #### Pour débug uniquement !!! #### \\
    	// Vérifie si la carte graphique du pc est compatible avec les shader (GLSL).
     
    	if (!sf::Shader::isAvailable()) // Si la carte graphique ne supporte pas les shaders :
    	{
    		std::cout << "Pas de shaders avec cette carte graphique." << std::endl; // Ecris dans la console "Pas de shaders avec cette carte graphique.".
    		exit(-22); // Arrete le programme avec erreur de sortie -22.
    	}
    	else // Sinon, si la carte graphique est compatible avec les shaders :
    		std::cout << "Shaders OK." << std::endl; // Ecris dans la console "Shaders OK.".
    	// ####            FIN            #### \\
     
     
    	entrée.afficherPointeur(false, true, CURSEURPERSO); // Appelle la procédure afficherPointeur de l'objet entrée (classe Input), et lui envoie les paramètres false (curseur non visible), true (curseur personnel activé), CURSEURPERSO (nom du fichier du curseur perso à utiliser).
     
    	window.setVerticalSyncEnabled(true); // Active la synchronisation verticale pour l'affichage des images à l'écran (synchronisé avec le taux de rafraichissement de l'écran (60Hz)).
     
    	while (!entrée.quitter()) // Tant que la variable m_terminer (procédure dans classe Input), est égale à 0 : 
    	{
    		entrée.updateEvenements(); // Appele la procédure updateEvenements qui mets à jour les interactions de l'utilisateur avec le programme (procédure dans classe Input). 
     
    		if (entrée.getTouche(sf::Keyboard::Key::Escape)) // Si l'utilisateur appuies sur la touche échap (procédure dans classe Input) :
    			break; // Quitte la boucle while.
     
    		choixJoueur = splashScreen.afficherSplashScreen(); 
     
    		if (choixJoueur == 1) // Si la variable choixJoueur est égale à 1 (Valeur associée à continuer) :
    			break; // Quitte la boucle while.
    		else if (choixJoueur == 2) // Sinon, si la variable choixJoueur est égale à 2 (Valeur associée à nouveau jeu) :
    		{
    			nouveauPerso.nouveauPerso(&nouveauPerso); // Exécute la procédure nouveauPerso de l'objet NouveauPerso de  de nom "nouveauPerso".
    		}
    		else if (choixJoueur == 3) // Sinon, si la variable choixJoueur est égale à 3 (Valeur associée à aide) :
    			break; // Quitte la boucle while.
    		else if (choixJoueur == 4) // Sinon, si la variable choixJoueur est égale à 4 (Valeur associée à quitter) :
    			break; // Quitte la boucle while.
    	}
     
    	window.close(); // Ferme la fenêtre SFML.
    	return 0; // Retourne 0 pour dire que tout c'est déroulé sans accrocs.
    }
    Mon code du constructeur est le suivant : (avec effectivement création des textes à afficher positions etc etc...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    NouveauPerso::NouveauPerso(Input *entree, sf::RenderWindow *window)
    {
    	Pentree = entree;
    	Pwindow = window;
     
    	choixPerso = 1;
     
    	tempsStd.asMilliseconds();
    	tempsTiret.asMilliseconds();
     
    	validerStr = "Valider";
    	annulerStr = "Annuler";
    	choixPersonnageStr = "Choix personnage : ";
    	pseudoJoueurStr = pseudoJoueurTmpStr = "Pseudo : ";
     
    	persoNotSelect = { 50, 50, 50, 255 };
    	persoSelect = { 255, 255, 255, 255 };
     
    	if (!policeTexteNomJoueur.loadFromFile(POLICE_PSEUDO_JOUEUR))
    	{
    		std::string messageErreur("Erreur Police Nom Joueur.");
    		erreur(messageErreur, -10);
    	}
     
    	validerTxt.setColor(sf::Color::Green);
    	validerTxt.setString(validerStr);
    	validerTxt.setFont(policeTexteNomJoueur);
    	validerTxt.setPosition(LARGEUR_FENETRE - LARGEUR_FENETRE / 3, HAUTEUR_FENETRE - HAUTEUR_FENETRE / 4);
     
    	annulerTxt.setColor(sf::Color::Red);
    	annulerTxt.setString(annulerStr);
    	annulerTxt.setFont(policeTexteNomJoueur);
    	annulerTxt.setPosition(LARGEUR_FENETRE / 5, HAUTEUR_FENETRE - HAUTEUR_FENETRE / 4);
     
    	choixPersonnageTxt.setColor(sf::Color::Blue);
    	choixPersonnageTxt.setString(choixPersonnageStr);
    	choixPersonnageTxt.setFont(policeTexteNomJoueur);
    	choixPersonnageTxt.setPosition(LARGEUR_FENETRE / 5, HAUTEUR_FENETRE / 3);
     
    	pseudoJoueurTxt.setColor(sf::Color::Red);
    	pseudoJoueurTxt.setFont(policeTexteNomJoueur);
    	pseudoJoueurTxt.setCharacterSize(TAILLE_POLICE_NV_PERSO);
    	pseudoJoueurTxt.setPosition(LARGEUR_FENETRE / 5, HAUTEUR_FENETRE / 5);
    	pseudoJoueurTxt.setString(pseudoJoueurTmpStr);
     
    	if (!persoMarioTexture.loadFromFile(IMG_SELECT_PERSO, MARIO_SELECT_RECT))
    	{
    		std::string messageErreur("Erreur Image sélection persommage.");
    		erreur(messageErreur, -11);
    	}
     
    	if (!persoLuigiTexture.loadFromFile(IMG_SELECT_PERSO, LUIGI_SELECT_RECT))
    	{
    		std::string messageErreur("Erreur Image sélection persommage.");
    		erreur(messageErreur, -11);
    	}
     
    	persoMarioSprite.setTexture(persoMarioTexture);
    	persoMarioSprite.setPosition(LARGEUR_FENETRE / 2  - 40, HAUTEUR_FENETRE / 3 - 35);
    	persoMarioSprite.scale(0.3f, 0.3f);
    	persoMarioSprite.setColor(sf::Color(255, 255, 255, 255));
     
    	persoLuigiSprite.setTexture(persoLuigiTexture);
    	persoLuigiSprite.setPosition(LARGEUR_FENETRE / 2 + 13, HAUTEUR_FENETRE / 3 - 35);
    	persoLuigiSprite.scale(0.3f, 0.3f);
    	persoLuigiSprite.setColor(sf::Color(55, 55, 55, 255));
     
    	rectValider = validerTxt.getGlobalBounds();
    	rectAnnuler = annulerTxt.getGlobalBounds();
    	rectPersoMario = persoMarioSprite.getGlobalBounds();
    	rectPersoLuigi = persoLuigiSprite.getGlobalBounds();
    }
    Ma procédure appelée dans le main (nouveauPerso avec en paramètre, l'adresse de lui même pour pouvoir le dessiner (Ligne 26)) qui renvoie vers une sauvegarde (Ligne 21) donc je renvoie bien quelque chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    void NouveauPerso::nouveauPerso(NouveauPerso *nouveauPerso)
    {
     
    	PnouveauPerso = nouveauPerso;
     
    	unsigned short int choixJoueur(0);
     
    	choixJoueur = nouveauPseudo();
     
    	while (!Pentree->quitter())
    	{
    		Pentree->updateEvenements();
     
    		if (Pentree->getTouche(sf::Keyboard::Key::Escape))
    			break;
     
    		choixJoueur = nouveauPseudo();
     
    		if (choixJoueur == 1) // Si la variabla choixJoueur est égale à 1 (Valider), alors ;
    		{
    			saveGame.setSauvegarde(pseudoJoueurStr, choixPerso); // Exécute la procédure  setSauvegarde.
    		}
    		else if (choixJoueur == 0) // Sinon, si la variable choixJoueur est égale à 0 (Annuler), alors :
    			break; // On sort de la boucle while.
     
    		Pwindow->draw(*PnouveauPerso);
    		Pwindow->display();
    		Pwindow->clear();
    	}
    }
    Et enfin mon code de setSauvegarde :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    void Sauvegarde::setSauvegarde(std::string &pseudoJoueurStr, unsigned short int &choixPerso)
    {
    	if (pseudoJoueurStr.size() > 9)
    	{
    		std::ofstream fichierSauvegarde(SAVE_FILE, std::ios::out | std::ios::app);
     
    		if (!fichierSauvegarde)
    		{
    			std::string texteErreur = "Impossible de créer un fichier de sauvegarde. Regardez vos droits d'administrateur ou reessayez.";
    			erreur(texteErreur, -23);
    		}
     
    		std::reverse(pseudoJoueurStr.begin(), pseudoJoueurStr.end());
     
    		for (int i(0); i < 9; i++) // 9 = "Pseudo : ".
    		{
    			pseudoJoueurStr.pop_back();
    		}
     
    		std::reverse(pseudoJoueurStr.begin(), pseudoJoueurStr.end());
     
    		for (unsigned int i(0); i < pseudoJoueurStr.size(); i++)
    		{
    			if (pseudoJoueurStr[i] == ' ')
    				pseudoJoueurStr[i] = '_';
    		}
     
    		fichierSauvegarde << pseudoJoueurStr << " " << choixPerso << " ";
    		fichierSauvegarde << "0 0 3 Grand" << std::endl << "#fin" << std::endl; // 0 = Niveau 0, 0 = Monde 0, 3 = nombre de vies, Grand = Bonus Perso.
    		fichierSauvegarde.close();
    	}
    	else
    		exit(2);
    }
    Voila où j'ai voulu en venir.

    Cela dit je pense que NouveauPersoWidget est plus parlant c'est sur .

    Mais si déjà ce code est "pourri" je vais devoir reprendre beaucoup de choses ^^

    Merci déjà pour ces conseils.

  10. #10
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    25 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 25 903
    Points : 207 396
    Points
    207 396
    Billets dans le blog
    85
    Par défaut
    Dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nouveauPerso.nouveauPerso(&nouveauPerso);
    Il n'y a pas besoin de passer en paramètre l'instance, car l'instance de la classe (le nouveauPerso de gauche) contient déjà toutes les informations (utilisation du mot clé this).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    décembre 2014
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2014
    Messages : 68
    Points : 16
    Points
    16
    Par défaut
    Ah voilà c'était ca la question primaire ^^ merci. Ca fonctionne

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Enlever un objet dans une ArrayList sans supprimer l'objet en lui même
    Par mazertys17 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 29/04/2016, 00h00
  2. Lire l'étiquette d'un Xcontrol dans lui-même
    Par Gazawik dans le forum LabVIEW
    Réponses: 0
    Dernier message: 23/04/2009, 09h49
  3. XMLSchema -> un élement dans lui même
    Par _root dans le forum Valider
    Réponses: 2
    Dernier message: 09/06/2008, 22h48
  4. Réponses: 1
    Dernier message: 10/02/2007, 20h30
  5. Rotation d'un objet sur lui-même
    Par Ninouw dans le forum OpenGL
    Réponses: 6
    Dernier message: 29/12/2006, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo