Accueil > Forum > > > > accéder à des membres d'une autre classe?
accéder à des membres d'une autre classe?
lundi 9 novembre 2009 à 12:45:55 |
accéder à des membres d'une autre classe?

djbneben
|
bonjour a tous,
voila je programme en ce moment un FPS, et pour mieux structurer mon jeu, je veux creer des class (oui j'en avait pas fait au début, c'est la structure bête de DarkGDK pour ceux qui connaissent!).
Donc j'utilise VS8 avec Dark GDK, ensuite j'ai:
>> une classe CMap qui contient entre autre LoadMap (...)
>> une classe CPlayer qui contient les données du joueur, avec entre autre une struct "tsDataPlayer".
J'ai donc crée 2 objet pour les 2 classes, et je souhaite donc appeler la struct de joueur dans la méthode LoadMap() pour y entrer les valeur récupéré comme la position de départ!
J'ai tapé "class CMap : public CPlayer" pour la classe CMap.
Dans la méthode LoadMap() j'ai bien accès aux membre de CPlayer. Tout compile, et en mode pas à pas je vois bien les variable de la struct changer. Mais des que je quitte la méthode LoadMap (), tous les membres de la struct valent 0.
La méthode avec static marche mais je trouve ca moche... ya pas autre chose ? j'ai du faire une boulette...
|
|
lundi 9 novembre 2009 à 16:54:38 |
Re : accéder à des membres d'une autre classe?

CptPingu
|
J'ai tapé "class CMap : public CPlayer" pour la classe CMap.
Y a quand même une sacrée erreur de conception !
Pour savoir si une classe peut hériter d'une autre, la règle 'est un' doit s'appliquer.
Ici une "map" n'est pas un "joueur", donc il ne devrait pas y avoir héritage. (Peut être une aggrégation ?).
une classe CPlayer qui contient les données du joueur, avec entre autre une struct "tsDataPlayer".
Tu sais qu'en C++ une struct et une classe sont identiques (mise à part le niveau de visibilité par défaut). Donc tu aurais pu ajouter des méthodes directement dans "tsDataPlayer".
Dans la méthode LoadMap() j'ai bien accès aux membre de CPlayer. Tout compile, et en mode pas à pas je vois bien les variable de la struct changer. Mais des que je quitte la méthode LoadMap (), tous les membres de la struct valent 0.
Ou est cette struct ? Est-elle passé quelque part, par copie ? Si c'est le cas, tu modifies sûrement une copie de ton véritable objet.
|
|
lundi 9 novembre 2009 à 18:17:16 |
Re : accéder à des membres d'une autre classe?

djbneben
|
Merci pour ta réponse !
Tu sais qu'en C++ une struct et une classe sont identiques (mise à part le niveau de visibilité par défaut). Donc tu aurais pu ajouter des méthodes directement dans "tsDataPlayer".
Pour la struct je sais qu'elle est "quasi" semblable a une classe, mais ce que je voulais c'est ca :
dans mon éditeur de niveau j'ai un "infoPlayerStart" qui possède les coordonnée du point de départ du joueur en X,Y,Z. Ensuite dans LoadMap(), je cherche tte les entités, et quand je tombe sur "infoPlayerStart", je voudrais stocker les coordonnées dans une structure qui est dans la classe CPlayer.
Ou est cette struct ? Est-elle passé quelque part, par copie ? Si c'est le cas, tu modifies sûrement une copie de ton véritable objet.
La struct est simplement dans la classe CPlayer. C'est celle-ci:
typedef struct tsDataPlayer
{
int numPlayer;
char* nomPlayer;
float positionCamPlayerX; // position du joueur en X Cam
float positionCamPlayerY; // position du joueur en Y Cam
float positionCamPlayerZ; // position du joueur en Z Cam
float angleCamPlayerX;// angle du joueur en X Cam
float angleCamPlayerY;// angle du joueur en Y Cam
float angleCamPlayerZ;// angle du joueur en Z Cam
float positionPlayerStartX; // position du joueur en X Cam
float positionPlayerStartY; // position du joueur en Y Cam
float positionPlayerStartZ; // position du joueur en Z Cam
float anglePlayerStartX;// angle du joueur en X Cam
float anglePlayerStartY;// angle du joueur en Y Cam
float anglePlayerStartZ;// angle du joueur en Z Cam
int vieRestante;
int vieMax;
int combiRestante;
int combiMax;
int numObjetAction; // le numéro d'objet que le joueur veut "actionner"
float distancePlayerToObjetAction; // la distance qui sépare le joeur de l'objet souhaité "actionner"
};
|
|
lundi 9 novembre 2009 à 22:49:51 |
Re : accéder à des membres d'une autre classe?

CptPingu
|
CMap ne doit pas hériter de CPlayer, mais doit avoir un tableau de CPlayer.
(std::vector ou std::list, ou encore std::set, tout dépend de ce que tu en fais).
Dans ta méthode LoadMap(), à chaque fois que tu trouves une entité, tu crées un objet de type CPlayer, tu le remplis, et tu l'ajoute à ta liste.
Néanmoins c'est très dur de t'aider sans voir ta modélisation (ton UML). Si tu n'as pas fait de modélisation, ça revient à coder à l'aveugle, et tu te retrouveras avec un code inmaintenable.
Pour ton erreur, j'ai besoin de voir le code qui pose problème.
typedef struct tsDataPlayer
Le typedef n'est pas nécessaire, tu peux écrire:
Ceci:
Peut être remplacé par cela:
|
|
jeudi 12 novembre 2009 à 20:28:05 |
Re : accéder à des membres d'une autre classe?

djbneben
|
Rebonjour
pour ce qui est de la modélisation, je l'ai fait sur une feuille... Je n'est plus Rational Rose sur mon PC! Sinon la j'ai repris tout mon code après le menu! Et j'ai ainsi fais comme ceci: la map contient un joueur, des ennemis, des entités, des sons... Et par exemple le joueur, lui, contient des armes.
voici ma nouvelle classe CMap_HL2:
Code C/C++ : class CMap_HL2
{
public:
//fonctions
CMap_HL2();
CMap_HL2(std::string nameMap);
~CMap_HL2();
bool LoadMap (std::string OptionalPathToTextureRoot,std::string OptionalPathToModelRoot,float TextureMapScale,int OCMode);
std::string getMsgError (void);
//variables
static enum {Normal, AllObjects};
private:
// structures
struct tsDataWorld
{
char* OCMode;
int FPS;
int POLYS;
int totalObjets;
int totalLimbs;
string nomMap3DW;
};
// autre variables
bool m_LoadFailed;
std::string m_MsgError;
std::string m_NameMapLoad;
// création des vecteurs perso !
vector<tsDataWorld> m_vDataWorld;
// poointeur sur un objet du joueur!
CPlayer_HL2 * o_Player;
};
et un des constructeur:
Code C/C++ : CMap_HL2::CMap_HL2(string nameMap) : m_NameMapLoad(nameMap)
{
o_Player = new CPlayer_HL2;
}
Donc je crée un joueur qui est lié a la map, si elle est détruite lui aussi (avec le "delete o_Player" dans le destructeur).
Bon pour le moment je crois pas m'être trompé mais faut me corriger si il le faut!
Maintenant j'ai une grande question : le joueur par exemple possède des armes qui elles, possèdes des sons! Est ce que je dois créer un objet pour chaque arme, et chaque son? Ou je dois utiliser un seul objet pour gérer toutes les armes du joueurs??!
2eme question : Si je veux utiliser l'objet du joueur dans le MAIN(), comment je dois l'appeler?
merci d'avance !
|
|
samedi 14 novembre 2009 à 02:35:02 |
Re : accéder à des membres d'une autre classe?

uaip
|
Salut,
Pour répondre à ta 2ème question, un objet s'utilise sur le même principe que n'importe quel type de variable.
Pour ta 1ère question, tout dépend de l'importance des armes. Si chaque arme possède un son, et ça s'arrête là, une bête table de correspondance suffit (style un tableau 2D).
Si tu veux stocker pour chaque arme sa durée de vie, sa puissance, ses dégâts, etc, je te conseillerais de faire une classe générique (template) ou au pire un héritage virtuel (au cas ou certaines armes aient plus de caractéristiques que d'autres), les armes peuvent alors être stockées dans un conteneur.
Pour les conteneur... je te déconseille vector. Officiellement, je ne suis pas censé l'avoir utilisé (on ne l'a pas encore vu en cours, donc ma prof m'apprendra sans doute des bonnes choses là dessus), mais vis à vis de mon expérience perso, j'ai préféré coder un conteneur perso qu'utiliser vector qui, par exemple, réalloue une zone et recopie tout le tableau en mémoire pour un simple ajout d'élément dans le tableau. Après, c'est sur que le code est blindé, mais bon... C'est sans doute ma réticence envers le C++ (qui ne nous permet pas toujours de savoir ce qui se cache derrière notre code) qui me fait dire ça.
Cordialement, uaip.
|
|
Cette discussion est classée dans : classe, méthode, membres, struct, loadmap
Répondre à ce message
Sujets en rapport avec ce message
URGENT : Classes, Pointeurs, et fonctions membres !! [ par guiguimac ]
bonsoir ... mon pbm avance mais là je cale grave !j'ai une classe cA avec comme membres (pour l'instant tout en public) :une string "NOM"une fonction
Acces méthode dérivées... [ par Clonk ]
BonjourEncore un problème de classe pour moi...voilà, j'ai une classe mère : champles classes filles sont : Numérique, date, caractèrej'ai des traitem
est-ce que l'adresse d'un objet est la meme que les membres ? [ par rick_moins_moins ]
Bonjour,je souhaiterais savoir si l'adresse d'une instance de classe est la meme que l'adresse d'une donnee membre de cette classe ?
Récupérer données membres de la classe Doc dans ma classe Dlg [ par threepwood ]
Bonjour,J'ai créé une boite de dialogue où je fais la saisie de plusieurs paramètres. Je souhaiterais accéder, dans ma classe CDlg, aux données membre
classe et pointeur [ par anduril22 ]
Salut j'ai un petit souci, (erreur de compilation) j'ai une classe qui se compose comme ceci :Dans mon fichier test.h***********************typedef st
Button et DrawItem [ par kalimanu ]
Bonjour à tous! Je suis en train de faire ma propre classe de bouton (classe qui hérite de CButton biensur je suis pas fou quand meme). Pour personnal
Dilemme de classe [ par tintin72 ]
Bonjour, Dans mon programme j'utilise une liste chainée représentée par une classe Element.Les membres 'suivant', 'precedent' etc sont 'private' et le
problème méthode [ par psychospire ]
Bonjour à tous je vous explique vite fait mon probleme : j'effectue un projet de bataille navale contenant 3 classes : une classe CGrille, une classe
Sous classer plusieurs controles dans une classe [ par julien_boss ]
Bonjour,je vous détail l'ossature de ma classe, qui crée une fenetre :jappelle une methode Create() qui va ... créer la fenetre, je fais passer dans l
Diagramme de classe [ par bjulien123 ]
Bonjour, Je débute en C++ et je souhaiterai réaliser des diagrammes de classes. Mon problème est le suivant : Comment mentionner dans un diagra
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|