08-03-2008 21:13:21
- quarty
- Membres
- Date d'inscription:
- Messages: 10
- IP: 90.8.59.217
- Courriel
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
Merci
"Le pingouin mange la pomme mais le pingouin et la pomme tombent par la fenêtre"
Hors ligne
08-03-2008 21:53:04
- Willikus
- Membres

- Date d'inscription:
- Messages: 150
- IP: 86.220.205.200
- Courriel Site web
Salut !
Remplace les "bool CEventReceiver::OnEvent(const irr::SEvent event)" par bool CEventReceiver::OnEvent(const irr::SEvent& event)
a+
w
EDIT : quelques explications bonus : depuis irrlicht 1.3, ça a changer et donc de nombreux tutos ont des défault tel que celui là (pas mal de syntaxe qui a changer)
Athlon 3000+ / 1024Mo PC3200 /8800 GTS
Hors ligne
08-03-2008 22:06:19
- quarty
- Membres
- Date d'inscription:
- Messages: 10
- IP: 90.8.59.217
- Courriel
Salut,
j'ai remplacé ce que tu m'as dit mais ca ne fonctionne toujours pas, je colle le le rapport complet de compilation:
- ----- Début de la génération : Projet : tuto_3d, Configuration : Debug Win32 ------
Compilation en cours...
main.cpp
c:\\users\\prêt fnac 164\\documents\\visual studio 2008\\projects\ uto_3d\ uto_3d\\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'
CEventReceiver.cpp
c:\\users\\prêt fnac 164\\documents\\visual studio 2008\\projects\ uto_3d\ uto_3d\\ceventreceiver.cpp(13) : error C2511: 'bool CEventReceiver::OnEvent(const irr::SEvent &)' : impossible de trouver la fonction membre surchargée dans 'CEventReceiver'
c:\\users\\prêt fnac 164\\documents\\visual studio 2008\\projects\ uto_3d\ uto_3d\\ceventreceiver.h(3) : voir la déclaration de 'CEventReceiver'
Génération de code en cours...
Le journal de génération a été enregistré à l'emplacement "file://c:\\Users\\Prêt Fnac 164\\Documents\\Visual Studio 2008\\Projects\ uto_3d\ uto_3d\\Debug\\BuildLog.htm"
tuto_3d - 2 erreur(s), 0 avertissement(s)
========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
EDIT : quelques explications bonus : depuis irrlicht 1.3, ça a changer et donc de nombreux tutos ont des défault tel que celui là (pas mal de syntaxe qui a changer)
Merci pour l'info
edit: J'ai encore une question
"Le pingouin mange la pomme mais le pingouin et la pomme tombent par la fenêtre"
Hors ligne
09-03-2008 10:25:41
- Willikus
- Membres

- Date d'inscription:
- Messages: 150
- IP: 86.220.205.200
- Courriel Site web
Désolé, je n'avais pas vu celui la : "bool OnEvent(const irr::SEvent event);" à remplacer par "bool OnEvent(const irr::SEvent& event);"
Pour les boutons nous on crée à crée des fonctions pour charger des images et les modifié lors du survol : l'effet est bouton, et avec des if/else on verifie le clic et la position
Athlon 3000+ / 1024Mo PC3200 /8800 GTS
Hors ligne
09-03-2008 10:57:24
- quarty
- Membres
- Date d'inscription:
- Messages: 10
- IP: 90.17.140.134
- Courriel
Ca fonctionne Merci beaucoup
"Le pingouin mange la pomme mais le pingouin et la pomme tombent par la fenêtre"
Hors ligne
09-03-2008 11:27:05
- Willikus
- Membres

- Date d'inscription:
- Messages: 150
- IP: 86.220.205.200
- Courriel Site web
Si tu commence je te conseil de cherche de tel erreur dans la doc de irrlicht : tu repert la fn qui deconne dans le rapport du compilateur puis tu la cherche dans la doc... apres tu compart, comme ça ça fait travailler ^^
(Même si ça devient vite chiant, et qu'a force, je demande aussi ><)
a+
w
Athlon 3000+ / 1024Mo PC3200 /8800 GTS
Hors ligne



