Bonjour, je débute sur Irrlicht, et après plusieurs essais d'imiter la caméra personnalisée de WoW (résultats pas au point), j'ai voulu tester ce code. Mais lorsque je compile (en ayant mit " cFollowCamera camera(cube1.getPointeur()); " où cube1.getPointeur est le sceneNode de mon modèle que je veux suivre )
le compilateur me donne (dev C++) :
In function `int main()':
cannot declare variable `camera' to be of type `cFollowCamera'
because the following virtual functions are abstract:
virtual bool irr::IEventReceiver::OnEvent(const irr::SEvent&)
[Build Error] [main.o] Error 1
Voilà alors je voudrais savoir si j'ai mal fait quelque chose, ou si cela vient du code...
Merci D'avance
Capry
Hors ligne
remplace
class MonEcouteur : public IEventReceiver { public: virtual bool OnEvent(SEvent event)
par
class MonEcouteur : public IEventReceiver { public: bool OnEvent(const irr::SEvent event)
Hors ligne
Merci de ta réponse,
mais j'ai toujours le même message dans le compilateur.
Je ne vois pourtant pas ce qui cloche.
Hors ligne
pardon remplace
class MonEcouteur : public IEventReceiver
{
public:
bool OnEvent(const irr::SEvent event)
par
class MonEcouteur : public IEventReceiver
{
public:
bool OnEvent(const irr::SEvent& event)
Hors ligne
Ah là c'est mieux déjà, le compilateur, ne m'affiche pas d'erreur, par contre le programme plante au démarrage...
Je vais essayer de voir si ce n'est pas à cause d'un de mes codes que le programme plante...
ÉDIT : apparemment non, j'ai mit le code minimale (device, driver, chargement du modèle etc...) mais le programme bug toujours à partir du moment où j'ajoute " cFollowCamera camera(Nmodele); " (où Nmodele est le noeud)
J'ai donc toujours le message d'erreur qui a priori pourrait venir de n'importe où dans le code donné.
Je me doute que c'est embêtant à trouver, mais je voudrait savoir si quelqu'un à déjà tester le code, et s'il est bien foctionnel ? Sinon je continue à chercher de mon côté aussi bien sûr ^^ ...
Dernière modification par capry (16-02-2009 10:38:39)
Hors ligne
a mon avit il trouve pas le mesh
Hors ligne
Eh bien si je ne mait pas la ligne cFollowCamera camera(Nmodele);, il y a le mesh qui apparait (un cube), mais si je met cette ligne, le programme plante... J'en déduit donc que la partie que j'ai faite est bonne, mais il doit y avoir une erreur dans le code donnée non. L'as-tu testé ?
Hors ligne
C'est bon en modifiant 2/3 petites choses il n'y à plus de problèmes, je vois mon objet et la caméra suis le perso. Mais j'ai beau appuyer sur n'importe quel bouton de la souris rien ne se passe. La classe prévoit-elle les événements avec la souris ?
EDIT : Là j'ai modifié plein de trucs pour l'adapter à mon code et ça marche ^^. Merci Beaucoup. Maintenant il y a juste un truc qui me chagrine : on ne peut pas régler la hauteur. Par exemple quand on descend la souris la caméra monte, et quand on monte la souris, la caméra descend. Est-ce que quelqu'un pourrait me donner le code pour celà ? Merci.
Sinon pour toute personne ayant des difficultés avec ce code je veux bien donner le mien...
Dernière modification par capry (17-02-2009 17:49:00)
Hors ligne
Je sais qu'il ne faut pas poster 3 messages d'affiliés mais comme personne ne met de nouveaux messages...
Bref je me suis essayé à modifier un peu le code pour tourner autour du perso, mais cette fois-ci en prenant en compte la hauteur ce qui donne au lieu de :
... if(MouseX != 0) { if (MouseX <= 8*.05f) { m_updated = true; m_yRotationAngle += 0.01; while (m_yRotationAngle > 2*PI) m_yRotationAngle -= 2*PI; } else if (MouseX >= 8*.95f) { m_updated = true; m_yRotationAngle -= 0.01; while (m_yRotationAngle < 2*PI) m_yRotationAngle += 2*PI; } } } if (m_DernierePosition != m_Nmodele->getPosition()) { m_updated = true; m_DernierePosition = m_Nmodele->getPosition(); } if (m_updated) { m_updated = false; vector3df m_Camerapos = m_DernierePosition; m_Camerapos.X += distance*sin(m_yRotationAngle); m_Camerapos.Z += distance*cos(m_yRotationAngle); m_Camerapos.Y += distance; m_Cam->setPosition(m_Camerapos); m_Cam->setTarget(m_DernierePosition); } ...
Ceci :
if(MouseY != 0) { if (MouseY <= 8*.05f) { m_updated = true; m_xRotationAngle -= 0.01; while (m_xRotationAngle < 2*PI) m_xRotationAngle -= 2*PI; } else if (MouseY >= 8*.95f) { m_updated = true; m_xRotationAngle += 0.01; while (m_xRotationAngle > 2*PI) m_xRotationAngle += 2*PI; } } if (m_DernierePosition != m_Nmodele->getPosition()) { m_updated = true; m_DernierePosition = m_Nmodele->getPosition(); } if (m_updated) { m_updated = false; vector3df m_Camerapos = m_DernierePosition; m_Camerapos.X += distance; m_Camerapos.Z += distance*cos(m_xRotationAngle); m_Camerapos.Y += distance*tan(m_xRotationAngle); m_Cam->setPosition(m_Camerapos); m_Cam->setTarget(m_DernierePosition); }
La caméra gère maintenant la hauteur mais le problème c'est que la caméra passe par exemple au dessus du perso, s'éloigne de plus en plus vers le haut beaucoup trop loin, et au bout d'une certaine distance se retrouve à une distance normal en dessous de la caméra o_O.
Comme j'ai peur de mal m'exprimer voici un lien pour télécharger le programme :
http://www.megaupload.com/?d=YHNZFDWW
Sinon je voudrait savoir (car je n'ai pas trouver) quelle ligne dois-je ajouter ou qu'est ce que je doit ajouter pour que la caméra ne dépasse pas la distance donnée ?
Merci d'avance,
Capry
EDIT :
Bah apparment j'ai trouvé comment faire pour l'axe Y :
if (m_updated) { m_updated = false; vector3df m_Camerapos = m_DernierePosition; m_Camerapos.X += distance*cos(m_xRotationAngle); m_Camerapos.Z += distance*cos(m_xRotationAngle); m_Camerapos.Y += distance*sin(m_xRotationAngle); m_Cam->setPosition(m_Camerapos); m_Cam->setTarget(m_DernierePosition); }
Donc comme ça la caméra se déplace bien sur l'axe horizontal, mais est incompatible avec l'autre, c'est-à-dire que la caméra fait n'importe quoi si je met :
if(m_updated) { m_updated = false; vector3df m_Camerapos = m_DernierePosition; //Déplacement verticaux m_Camerapos.X += distance*cos(m_xRotationAngle); m_Camerapos.Z += distance*cos(m_xRotationAngle); m_Camerapos.Y += distance*sin(m_xRotationAngle); //Déplacement horizontaux m_Camerapos.X += distance*sin(m_yRotationAngle); m_Camerapos.Z += distance*cos(m_yRotationAngle); m_Camerapos.Y += distance; m_Cam->setPosition(m_Camerapos); m_Cam->setTarget(m_DernierePosition); }
Je touche au but, mais il me reste encore ce problème avant que la caméra imite celle de WoW par exemple.
Merci de m'aider à le résoudre (même si pour l'instant je parle un peu tout seul XD).
Bonne soirée,
Capry
Dernière modification par capry (18-02-2009 21:21:19)
Hors ligne