C++ et héritage (SDL) - C++ - Programmation
Marsh Posté le 17-07-2003 à 17:29:03
Citation : C'est possible donc ? Je veux donc créer des objets en gardant comme "noyau central" les données membres d'un objet de la classe de base. |
Ben tu les met en protected.
Je vois trop le problème. Donne un peu de code.
Marsh Posté le 17-07-2003 à 20:34:13
Donc mon idée serait de faire :
int main(int argc, char *argv[])
{
Demarrage().Start();
return 0;
}
Je voudrais donc que ça lance automatiquement Ecran::Ecran(), pour initialiser tout SDL, et ensuite lancer la boucle de choix "DVD", "Films" ou "Jeux".
class Ecran
{
public:
Ecran();
void DrawIMG(SDL_Surface *img, int x, int y);
// les fonctions suivantes seront redéfinies dans chaque classe et sont donc virtuelles
virtual void Start(); // fonction de "démarrage"
virtual void DrawAll(); // va dessiner tous les élements graphiques par itération
virtual void ProcessSelection(); // action à prendre lors de clic/ENTREE
virtual void ProcessKey(); // action à prendre lors de mouvement clavier/joystick
SDL_Event event;
SDL_Surface *screen;
SDL_Surface *background;
SDL_Surface *text;
SDL_Color black;
SDL_Color white;
TTF_Font *font;
};
class Demarrage : public Ecran
{
public:
Demarrage();
void Start();
void DrawAll();
void ProcessSelection();
void ProcessKey();
// on rajoute en "private" les données supplémentaires spécifiques
// à cette classe
private:
void DrawTopic(vector<string>::const_iterator &, int, int, bool);
vector<string> topics;
vector<string>::const_iterator currentTopic;
SDL_Surface *rectangle;
};
class Films : public Ecran
{
public:
Films();
void Start();
void DrawAll();
void ProcessSelection();
void ProcessKey();
// on rajoute en "private" les données supplémentaires spécifiques
// à cette classe
private:
void DrawFile(vector<string>::const_iterator &, int, int, bool);
void PopulateFiles();
int VectorPosition(vector<string> &, string);
vector<string> files;
vector<string>::const_iterator currentFile;
vector<string>::const_iterator topFile;
set<string> extensions;
SDL_Surface *up;
SDL_Surface *down;
SDL_Rect tick;
SDL_Rect bar;
TTF_Font *filesFont;
TTF_Font *titleFont;
TTF_Font *symbolFont;
};
Voilà donc les classes. Et maintenant, est-ce possible, dans Demarrage::ProcessSelection() par exemple, d'appeler Films::Start() et reprendre les données issues de la classe Ecran précédemment initialisées (et faire de même pour quand on reviendra "en arrière" à l'écran de démarrage).
J'espère que c'est pas trop confus :-)
Marsh Posté le 18-07-2003 à 14:27:26
Visiblement, tu ne connais pas trop l'héritage, avant de continuer, trouve-toi un bouquin et lis ... Ca fait pas de mal ...
juste une précision : le mot-clé virtual ne te permet pas d'avoir des fonctions sans corps ... Il faut que la fonction soit déclarée virtuelle pure dans ecran, exemple :
Code :
|
Pour ce qui est des attributs publics de ta classe ecran, tu préfèreras sans doute les voir derrière un simple protected ... Mais j'imagine que tu ne connais pas, alors bonne lecture ...
Marsh Posté le 20-07-2003 à 13:37:03
theShOcKwAvE tu m'as coupé l'herbe sous le pied.
Rien à redire
Marsh Posté le 15-07-2003 à 12:22:02
Salut,
Voilà je suis en train de faire un petit programme en SDL (librairie graphique à l'origine pour les jeux) et je me prends la tête déjà depuis un moment sur un problème de classes et d'héritage.
Il s'agit d'un frontend à MPlayer en quelque sorte (+ émulateurs divers) pour ma DivXBox :
Ecran de démarrage :
- DVD --> Clic => Lance le DVD Video
- Films --> Clic => Liste des films s'affichent
- Jeux --> Clic => Liste des ROMs s'affichent
Comme l'écran de démarrage et les 2 autres partagent de nombreuses données comunes (un fond d'écran en SDL_Surface* par exemple), je pensais me servir de la notion d'héritage.
Donc : Ecran, classe de base
Démarrage, Films, Jeux, classes dérivées
Seulement je ne vois pas trop comme ça marche.
Je voudrais pouvoir créer un objet de classe Démarrage (qui lancera le constructeur de Ecran, la classe de base, pour initialiser SDL entre autre) qui, suivant ce sur quoi on clique, créera un objet de type Films ou Jeux *mais* en reprenant les données membres de la classe Ecran.
C'est possible donc ? Je veux donc créer des objets en gardant comme "noyau central" les données membres d'un objet de la classe de base.
Merci de m'aider !
A+