Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Initialisation d'un sf::RenderWindow  (Lu 2309 fois)

0 Membres et 1 Invité sur ce sujet

Nano75

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Initialisation d'un sf::RenderWindow
« le: Novembre 01, 2013, 07:47:12 pm »
Bonsoir, je vous écris pour avoir quelques conseils sur l'initialisation d'un objet sf::RenderWidow en C++.
Supposons que j'ai une petite classe affichage définie de cette manière:

class Affichage
{
public:
Affichage();
~Affichage();

private:
sf::RenderWindow fenetre;
}
 

Une manière d'initialiser fenetre serait de le faire dans la liste d'initialisation du constructeur, comme ceci par exemple:

Affichage::Affichage() : fenetre(sf::VideoMode(800,600,32), "jeu") {}
 

Mes questions sont les suivantes:

a) Au lieu d'initialiser ma fenêtre comme ceci, peut on l'initialiser plutôt en ajoutant une fonction membre qui ressemblerait à ceci:

affichage_init()
{
this->fenetre = ??? // le problème est ici, comment initialiser la variable membre fenetre de ma classe affichage avec this?
}
 

b) Prenons l'hypothèse d'un petit jeu en 2D avec une classe Jeu (qui s'occupe de gérer tout le jeu video. Est ce un bon choix d'avoir dans cette classe Jeu un membre de type affichage qui s'occupe d'initialiser la fenetre et les spirtes ... Par exemple on aurait ça:

class Jeu
{
public:
//pleins de fonctions membres
jeu_init(); //initialisation du jeu dont la fenetre avec la variable membre app;
}
private:
affichage app; // ma classe affichage
 

Et dans jeu_init() j'aurais pas exemple un affichage_init() (fonction membre de ma classe affichage) qui m'initialise la fenêtre, que pensez vous de cette façon de faire?

Merci.

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Initialisation d'un sf::RenderWindow
« Réponse #1 le: Novembre 01, 2013, 07:50:34 pm »
Tu peux utiliser la fonction membre create pour créer ta RenderWindow.

Nano75

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : Initialisation d'un sf::RenderWindow
« Réponse #2 le: Novembre 01, 2013, 08:21:57 pm »
Salut G, j'ai déjà essayé mais sans succès, je précise que mon souhait est d'avoir une fonction publique dans affichage qui initialise un membre privé sf::RenderWindow:

Ici ma classe affichage toute bête
class Affichage
{
public:
Affichage();
~Affichage();
void affichage_init();

private:
sf::RenderWindow fenetre;
}
 

Je souhaite implémenter affichage_init() pour initialiser le membre fenetre, donc j'ai essayé ceci (et pleins d'autres choses):

void Affichage::affichage_init()
{
this->fenetre = create(VideoMode(800,600,32), "jeu");
}
 

Mais sans succès, des messages d'erreurs comme quoi create n'est pas membre de sf::Window...,

Donc que dois je mettre dans ma fonction affichage_init() pour initialiser fenetre, j'ai essayé des tonnes de solutions, sans succès...

Nano75

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : Initialisation d'un sf::RenderWindow
« Réponse #3 le: Novembre 01, 2013, 08:39:59 pm »
J'ai finalement réussi:

void Affichage::affichage_init()
{
fenetre.Create(sf::VideoMode(800,600,32), "jeu");
}
 

Donc c'est réglé, et pour la question b) de mon premier message quelqu'un aurait il un avis?

PetitPoney

  • Newbie
  • *
  • Messages: 44
    • Voir le profil
Re : Initialisation d'un sf::RenderWindow
« Réponse #4 le: Novembre 12, 2013, 10:19:00 am »
Salut !

Je travaille actuellement sur un projet de 3ème année en école d'info. On utilise la SFML aussi :).
Pour ta question voilà ce que nous avons au niveau de l'architecture.

Un Manager qui est le big brother du jeux.
Ce Manager contient plusieurs sous partie du programme découpé en "Engine". Par exemple, nous avons un GameEngine (s'occupe de mettre à jour les propriété des objets du jeux), un PhysicEngine qui lui ne s'occupe que des calculs physiques (collisions etc), un GraphicEngine qui ne fait que de l'affichage, NetworkEngine, InputEngine etc etc.

Donc sur le principe d'avoir une classe qui ne fait que l'affichage je suis plus que d'accord, ça permet de bien séparer les différentes parties du code.
Cepedant si tu pars sur ce principe de plusieurs moteurs, essaie d'avoir quelque chose de cohérent au niveau de la structure de ceux-ci (par exemple, en passant par une interface IEngine qui oblige tous les moteurs à avoir la même forme, initialize(), update(), stop() par exemple).
Le Manager n'est chargé que de faire communiquer les engines, appeler leurs fonctions start()  update() stop(), et des choses annexes au jeu.

Si quelqu'un a des remarques à faire je suis preneur   :)

Cordialement.