Bonjour à tous,
Etant passionné de foot et d'informatique, je me suis mis dans la tête de faire une petite vidéo d'une action de football.
Donc, depuis quelques temps, je "m'amuse" avec irrlicht et c++
J'ai découvert les objets md2 et les fameuses sydney qui court, marche et saute déjà comme une grande.
Cela est bien pour commencer et m'évite du coup de mettre les mains dans blender pour fabriquer mon propre md2.
J'ai réussi à la déplacer d'un point A à un autre point B en la faisant marcher puis courir etc...
Par contre, je bloque dès que je veux pousser la chose un peu plus loin.
Vu que je dois mettre 22 sydney dans la scène, je me suis dit "Tiens, si je faisais une classe joueur qui hériterait de IAnimatedMeshSceneNode".
Et là patatra, des erreurs car c'est une classe abstraite.
Je fais des recherches comme d'habitude sur mon ami google. Et je tombe une nouvelle fois (comme par hasard) sur ce forum : http://irrlicht-fr.org/viewtopic.php?id=1006
Du coup, je modifie mon header comme expliqué mais, sydney ne s'affiche pas dans la scène.
Bref, tout ça pour vous demander si ma méthode est la bonne. Si ce n'est pas le cas, pourriez-vous m'indiquer ce qui n'est pas bon.
Merci d'avance.
Nico
Hors ligne
Salut,
Ta classe a-t-elle une méthode Render() ?
Hors ligne
Voici une partie de mon code.
J'ai bien render dans mon .h mais pas dans mon .cpp
Merci pour ton aide en tout cas.
Dernière modification par defrgly (02-06-2011 09:31:56)
Hors ligne
Hmm, j'suis pas persuadé que tu emprunte la bonne voie...
Dans ton constructeur, tu as smgr->addAnimatedMeshSceneNode(mesh);
'mesh' il vient d'ou ?
Hors ligne
J'ai édité mon post précédent, en mettant quasi en entier mon main.cpp où se trouve mon mesh.
Tu dis que je ne suis pas sur la bonne voie...
Comment penses-tu qu'il serait mieux de faire ?
Merci d'avance.
Hors ligne
Salut
Pour ce qui est du mesh, je ne vois toujours pas comment tu le passe
à ton constructeur, ou alors il y a quelque chose qui m'a échappé...
Tu définis effectivement *mesh dans la fonction main, mais je ne vois
pas comment le paramètre est envoyé 'joueur1' ?
Sinon, si j'ai bien compris, tu cherches à gérer un certains nombre de joueur sur un terrain.
Créer une classe Player, c'est très bien, mais perso je n'en aurais pas fait une classe dérivée
de IAnimateMeshSceneNode.
Crées une classe bien à part, qui colle mieux à l'application que tu veux monter. Car ton player aura
certes une représentation graphique à l'écran, mais certainement aussi bien d'autre paramètre lié à son
intégration et son évolution dans le jeux.
En règle générale, on essais toujours de séparer autant que possible les éléments du programme que l'on
écris de ceux des librairies que l'on utilise, en particulier le moteur de rendu.
Donc tu écris une classe Player, qui contiendra un ensemble de données et de méthodes pour que tes joueurs
vivent leur vie dans ton jeux, dont un des éléments sera le lien avec l’élément graphique lié au moteur de rendu
(dans ton cas on va dire un AnimateMeshSceneNode), cela sera à mon sens bien plus facile en terme de lisibilité
et de maintient du code, et te causera moins de soucis de compréhension
(j'espère ne pas avoir été trop brouillon dans mon explication)
Hors ligne
Donc si je comprends bien, j'aurai 22 instances de AnimatedMeshSceneNode ?
Petite question : quelle est la différence entre IAnimatedMeshSceneNode et AnimatedMeshSceneNode (sans le I) ?
Ma classe Player possèdera des propriétés : coordonnées x et z.
Et des méthodes pour changer les x et z ?
Mais de quoi héritera ma classe ? AnimatedMeshSceneNode ou IAnimatedMeshSceneNode ?
Merci d'avance.
Hors ligne
tu auras 22 Players, et évidement chacun aura son propre IAnimatedMeshSceneNode, ce qui est normal vue que chacun de tes 22 joueurs doit pouvoir avoir des
comportements indépendants. Chacun des joueurs aura aussi un comportement propre au niveau IA (attaquant, gardien, etc...). Bref, ta classe Player est le socle
global reflétant l'enssemble des élément constituant chaque joueur, et pas seulement sur le plan graphique.
Et pourquoi veux nescesserement que cette classe hérite d'une autre ?
[PS] quand à IAnimatedMeshSceneNode et AnimatedMeshSceneNode, c'était un abus de langage dans mon message précédent, elle reflète globelement la même chose.
Hors ligne
En suivant tes conseils, voilà ce que ça donne si j'ai bien analysé tes dires.
En espérant que ça corresponde à ce que tu m'as expliqué.
J'ai créé une classe Player qui possède une seule donnée : IAnimatedMeshSceneNode* node
J'ai fait les constructeurs pour alimenter cette donnée.
Et j'ai fait 2 méthodes pour bouger le node (orientation et positionnement).
Mais du coup j'ai une erreur que je n'arrive pas à expliquer :
/tmp/ccujIpP3.o: In function `main':
main.cpp:(.text+0x20e): undefined reference to `Player::Player(irr::scene::IAnimatedMesh*)'
Hors ligne
Dans le principe c'est mieux
Sinon ben c'est un peu normal, il faudrait que la définition de tes méthodes correspondent
à ton header, et donc déjà écrire:
Hors ligne
Ouais tu as raison, mes entêtes de constructeur étaient un peu erronés
Mais sinon, l'erreur est toujours la même... Une idée ?
Hors ligne
essais plutôt un Player *joueur = new Player(mesh);
Hors ligne
C'est toujours pareil
Au risque de passer pour le relou de base... Pourquoi construire mon Player de cette manière ?
Hors ligne
Ben en fait c'est selon chacun en fait, sur ce genre d'appli on passe souvent par les pointers de classes, mais tu architecture comme tu le sent
Sinon, la je vois pas oui peut être le problème au vu des élément que tu fournis.
Tu as bien un #include "Player.h" dans ton main.cpp des fois ?
Hors ligne
éventuellement un problème de namespace ou de header Irrlicht, sinon je ne vois pas...
Hors ligne
J'avoue être bloqué...
tmyke, merci pour ton aide.
Sinon, il n'y a personne d'autre qui aurait une idée.
Hors ligne