Hello,
Je cherche à apprendre a créer mes propres caméras, pour cela j'ai suivit le tutoriel du SDZ.
Pour tester j'ai implémenté une caméra comme celle dans le tuto, j'ai rajouté les méthodes manquantes : createclone & le destructeur en me basant sur les sources d'Irrlicht.
Mon createclone :
Le destructeur :
Puis donc mon main je l'utilise :
Et après compilation cela ne fonction pas... D'abord j'ai cru que c'était la partie OnEvent mais après test cela s'avère faux.
Quelqu'un aurait il une piste ?
Merci,
RVM
Hors ligne
Est-ce que ça marchait avant de rajouter createclone et le destructeur?
Hors ligne
Même sans rajouter createclone et le destructeur sa ne marchait pas.
Par contre, d'après mes tests, s'est dans le OnEvent qu'il y a le problème : les conditions ne passent pas...
Edit :
Les conditions case irr::EMIE_LMOUSE_PRESSED_DOWN:, case irr::EMIE_LMOUSE_LEFT_UP:, case irr::EMIE_MOUSE_WHEEL: ne passent pas.
RVM
Dernière modification par RVM (03-04-2012 10:25:01)
Hors ligne
Bon, j'ai trouvé le tuto dont tu me parlais(Tuto SDZ).
Comme je te l'ai dit l'autre fois, "mets ton code!". Parce que, trouver un problème dans ton OnEvent sans en avoir le code... Et donne aussi les liens lorsque tu cites une source. Les personnes qui passent pour aider n'ont pas forcément le temps de chercher comme je viens de le faire. Si tu ne donnes pas assez d'informations, celui qui n'a pas le temps ne répondra pas alors que, s'il avait eu les bonnes infos, il aurait peut-être résolu ton problème.
Je n'essaie pas d'être désagréable mais pour ceux qui aident, il est bien plus agréable de le faire quand la personne explique correctement son problème. Donc un texte explicatif de ce qui se passe(ou se passe pas^^), une ou des images pour ilustrées si besoin et SURTOUT du CODE serait le bien venu. Par contre, pour ton écriture, c'est parfait .
Sur ce, au prochain post.
Hors ligne
johnplayer :
Bon, j'ai trouvé le tuto dont tu me parlais(Tuto SDZ).
Comme je te l'ai dit l'autre fois, "mets ton code!". Parce que, trouver un problème dans ton OnEvent sans en avoir le code... Et donne aussi les liens lorsque tu cites une source. Les personnes qui passent pour aider n'ont pas forcément le temps de chercher comme je viens de le faire. Si tu ne donnes pas assez d'informations, celui qui n'a pas le temps ne répondra pas alors que, s'il avait eu les bonnes infos, il aurait peut-être résolu ton problème.
Je n'essaie pas d'être désagréable mais pour ceux qui aident, il est bien plus agréable de le faire quand la personne explique correctement son problème. Donc un texte explicatif de ce qui se passe(ou se passe pas^^), une ou des images pour ilustrées si besoin et SURTOUT du CODE serait le bien venu. Par contre, pour ton écriture, c'est parfait ;) .
Sur ce, au prochain post.
Je comprends complétement et je m'excuse de cette oublie d'information.
Mon code OnEvent (un peu modifié par rapport au tuto) :
plog est une class pour log.
Mais je pense que le problème vient d'autre par car j'ai testé un CodeSnipet (Camera RPG (http://irrlicht.sourceforge.net/forum/v … mp;t=45607)) et sa ne fonctionne toujours pas...
Mon main au cas où : http://pastebin.com/DvV4Lwre
Merci de l'aide,
RVM
Hors ligne
Je ne vois aucune erreur mais d'après ce que j'ai compris : ton code compile, le programme tourne sans planter mais l'appui sur les touches ne fait rien.
Pour voir si c'est pas la souris qui pose problème, mets ton event en commentaire et essaie celui-ci:
bool CSceneNodeAnimatorCameraTrackball::OnEvent(const irr::SEvent& event) { plog->Write("Event On"); if (event.EventType == irr::EET_KEY_INPUT_EVENT) { switch(event.KeyInput.Key) { case irr::KEY_ESCAPE: // return true; case irr::KEY_KEY_A: { plog->Write("Le bouton 'A' a bien été actionné."); // if(event.KeyInput.PressedDown) this->m_isPressed = true; else this->m_isPressed = false; } return true; default: return true; } } if(event.EventType == irr::EET_MOUSE_INPUT_EVENT) { plog->Write("Mouse IN"); switch(event.MouseInput.Event) { /** case irr::EMIE_LMOUSE_PRESSED_DOWN: { plog->Write("LMOUSE Down"); this->m_isPressed = true; return true; } case irr::EMIE_LMOUSE_LEFT_UP: { plog->Write("LMOUSE Left"); this->m_isPressed = false; return true; } **/ case irr::EMIE_MOUSE_WHEEL: { plog->Write("MOUSE Wheel"); if ( event.MouseInput.Wheel > 0 ) { m_radius -= 1.0f * m_moveSpeed; } else { m_radius += 1.0f * m_moveSpeed; } this->m_wheel = true; return true; } case irr::EMIE_MOUSE_MOVED: { if (this->m_isPressed == false) { this->m_cursorPos = this->m_cursorControl->getRelativePosition(); return true; } // if the left button is pressed, then we get the change and // set the rotation vector. And update the position else if (this->m_isPressed == true) { m_cursorMove = m_cursorControl->getRelativePosition() - m_cursorPos; m_rotation.X += m_cursorMove.X * m_rotateSpeed; m_rotation.Y += m_cursorMove.Y * m_rotateSpeed; // check the Y change to prevent vertical looping if (m_rotation.Y >= MAXANGLE) { m_rotation.Y = MAXANGLE; } else if (m_rotation.Y <= -MAXANGLE) { m_rotation.Y = -MAXANGLE; } m_cursorPos = m_cursorControl->getRelativePosition(); return true; } } } } plog->Write("Event End"); return false; // event not proceeded }
Si le bouton A n'a aucun effet, il faut peut-être voir à ce niveau du code :
"Comme nous l'avons vu plus haut, il est indispensable de redéfinir isEventReceiverEnabled pour indiquer au node auquel est attaché l'animator, que celui-ci doit bien recevoir les events."
Il en parle dans le tuto juste avant le paragraphe "Implémentation de la caméra".
Je compte me créer une camera personnelle aussi mais ce n'est pas encore au programme donc je vais avoir du mal a t'aider.
PS : Sinon tu peux aussi attacher ton animator à un ISceneNode avec un mesh et regarder comment le mesh se comporte.
Hors ligne
J'ai testé ton code et l'action de la touche A fonctionne. Et j'ai trouvé pourquoi :
J'ai définit un EventReceiver que je set lors de la création de mon device. Mon EventReceiver prenait en compte les event de la souris et passait en priorité par rapport au eventreceiver de l'animator.
Mais je comprends pas pourquoi, mon event prend le pas sur le second que sur les boutons de la souris et pas sur la position. Faudrait que le look le code source d'irrlicht de plus près.
Merci de l'aide johnplayer,
RVM
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 80 invités en ligne Aucun membre connecté RSS Feed |