#0 

08-03-2008 22:13:21

quarty
Membre
Date d'inscription: 08-03-2008
Messages: 10

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 smile, si vous avez un autre tuto sur les events avec irrlicht je prend aussi smile

Merci


"Le pingouin mange la pomme mais le pingouin et la pomme tombent par la fenêtre"

Hors ligne


#1 

08-03-2008 22:53:04

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
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)

Dernière modification par Willikus (08-03-2008 22:54:13)


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


#2 

08-03-2008 23:06:19

quarty
Membre
Date d'inscription: 08-03-2008
Messages: 10

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 smile 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)


"Le pingouin mange la pomme mais le pingouin et la pomme tombent par la fenêtre"

Hors ligne


#3 

09-03-2008 11:25:41

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
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


#4 

09-03-2008 11:57:24

quarty
Membre
Date d'inscription: 08-03-2008
Messages: 10

Ca fonctionne Merci beaucoup


"Le pingouin mange la pomme mais le pingouin et la pomme tombent par la fenêtre"

Hors ligne


#5 

09-03-2008 12:27:05

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
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


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
115 invités en ligne
Aucun membre connecté
RSS Feed