|
Création du message
|
08-03-2008 21:13:21
|
quarty
|
Salut J'ai trouvé un super tuto sur Le site du zéro, pour le moment j'en suis à la partie qui traite des events, j'ai donc suivis le tuto mais j'arrive à une erreur lors de la compilation: main.cpp(32) : error C2259: 'CEventReceiver' : impossible d'instancier une classe abstraite à cause des membres suivants : 'bool irr::IEventReceiver::OnEvent(const irr::SEvent &)' : est abstrait c:\\program files\\microsoft visual studio 9.0\\vc\\include\\irrlich\\ieventreceiver.h(256) : voir la déclaration de 'irr::IEventReceiver::OnEvent' voila le code (copié directement depuis le site du zéro: Main.cpp: #include "CEventReceiver.h" int main(void) { //Device, driver et graphe de scene. irr::IrrlichtDevice* device = irr::createDevice(irr::video::EDT_OPENGL, irr::core::dimension2d<irr::s32>(800,800),32,false,false,false); irr::video::IVideoDriver* driver = device->getVideoDriver (); irr::scene::ISceneManager *sceneManager = device->getSceneManager (); //On rend invisible le curseur. device->getCursorControl ()-> setVisible (false); //Sydney irr::scene::IAnimatedMeshMD2* modele; modele = (irr::scene::IAnimatedMeshMD2*)sceneManager->getMesh("sydney.md2"); irr::scene::IAnimatedMeshSceneNode* Nmodele = sceneManager->addAnimatedMeshSceneNode(modele); //On modifie les proprietes de Sydney Nmodele->setMaterialFlag(irr::video::EMF_LIGHTING, false); Nmodele->setFrameLoop(0, 0); Nmodele->setMaterialTexture( 0, driver->getTexture("sydney.bmp") ); //La camera irr::scene::ICameraSceneNode *camera; camera = sceneManager->addCameraSceneNodeFPS (0,100.0f,300.0f); //On cree le capteur d'event et on l'associe au device. CEventReceiver receiver(Nmodele); device->setEventReceiver(&receiver); //La boucle de rendu while (device->run()) { driver->beginScene(true, true, irr::video::SColor(0,200,200,200)); //Met a jour la position du mesh receiver.majPosMesh(); sceneManager->drawAll (); driver->endScene (); } device->drop (); return 0; } CEventReceiver.h: #include <irr/irrlicht.h> class CEventReceiver : public irr::IEventReceiver { public : //Le constructeur. CEventReceiver(irr::scene::IAnimatedMeshSceneNode* Nmodele); //Capte automatiquement les events. bool OnEvent(const irr::SEvent event); //Met a jour la position du mesh. void majPosMesh(); private : //Le modele qu'on va controler. irr::scene::IAnimatedMeshSceneNode* m_Nmodele; //Indique si on est deja en mouvement ou pas. bool m_isMoving; }; CEventReceiver.pp: #include "CEventReceiver.h" CEventReceiver::CEventReceiver(irr::scene::IAnimatedMeshSceneNode* Nmodele) { //On pointe le mesh passe en parametre. m_Nmodele = Nmodele; //Par defaut on ne bouge pas m_isMoving = false; } bool CEventReceiver::OnEvent(const irr::SEvent event) { //On verifie que le pointeur est ok if(m_Nmodele != 0 //Qu'il s'agit d'un event concernant un appui/relachement de touche && event.EventType == irr::EET_KEY_INPUT_EVENT //Qu'il s'agit de la touche z && event.KeyInput.Key == irr::KEY_KEY_Z) { //Si il s'agit d'un appui if(event.KeyInput.PressedDown == true) m_isMoving = true; //Sinon c'est un relachement else m_isMoving = false; //L'event est traite, on retourne true return true; } //Si on arrive la, c'est qu'on a pas traite l'event return false; } void CEventReceiver::majPosMesh() { //On verifie que le pointeur vers le mesh est //ok et que la touche est enfoncee if(m_Nmodele != 0 && m_isMoving == true) { //On commence par recuperer la position actuelle irr::core::vector3df v = m_Nmodele->getPosition(); //On y ajoute la valeur de deplacement v.X += 1.0f; //On renvoie la nouvelle position m_Nmodele->setPosition(v); } } J'espere que quelqu'un pourras m'aider  , si vous avez un autre tuto sur les events avec irrlicht je prend aussi  Merci
|