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
Hors ligne
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)
Dernière modification par Willikus (08-03-2008 22:54:13)
Hors ligne
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\tuto_3d\tuto_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\tuto_3d\tuto_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\tuto_3d\tuto_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\tuto_3d\tuto_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 Avec irrlicht on peux créer des boutons, les boutons ont un "theme" est-ce qu'on peux changer de theme ou est-ce qu'on dois utiliser une autre librairie (comme gtk) pour gérer les boutons ?
Dernière modification par quarty (09-03-2008 02:59:10)
Hors ligne
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
Hors ligne
Ca fonctionne Merci beaucoup
Hors ligne
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
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 45 invités en ligne Aucun membre connecté RSS Feed |