#0 

01-03-2011 02:47:08

mmorpglefilm
Abonné
Lieu: la galaxie UDFy-38135539
Date d'inscription: 18-05-2010
Messages: 162
Site web

Bonjour, je viens de continuer mon jeu (j'avance de jour en jour !!) est la je bloque pour créer un système d’évènement.
En réaliter je viens de créer une classe spécialement pour pouvoir piloter tous les mesh de mon jeu, sauf quand je fais :

Event Evenement(m_device, m_VaisseauNode, m_Position, m_rotation, m_Aceleration, m_vitesse);
m_device->setEventReceiver(&Evenement);

Bam un jolie "negativity.exe" à cessé de fonctionner...

Voila ma class pour créer un gestionnaire d’évènement :

Code c++ :

#include "Event.h"

Event::Event(irr::IrrlichtDevice *device, irr::scene::IAnimatedMeshSceneNode *Mesh, irr::core::vector3df Posi,
int RotateSpeed, int Speed, int VitesseMax) : m_device(device), m_Mesh(Mesh), m_Posi(Posi),
m_RotateSpeed(RotateSpeed), m_Speed(Speed), m_VitesseMax(VitesseMax)
{
    m_Mesh = Mesh;
    m_device = device;
}

int i3;

bool Event::OnEvent(const irr::SEvent &event)
{


    if (event.EventType == irr::EET_KEY_INPUT_EVENT)
    {
        //!OMFG VOUS AVEZ APPUYER SUR UNE TOUCHE !!!
    }
    return false;
}



La class :

Code c++ :

#ifndef EVENT_H_INCLUDED
#define EVENT_H_INCLUDED

#include <irrlicht.h>
#include <iostream>
#include <windows.h>

class Event : public irr::IEventReceiver
{
    public :

    Event(irr::IrrlichtDevice *device, irr::scene::IAnimatedMeshSceneNode *Mesh, irr::core::vector3df Posi,
    int RotateSpeed, int Speed, int VitesseMax);

    virtual bool OnEvent(const irr::SEvent &event);

    irr::scene::IAnimatedMeshSceneNode *Mesh;

    private :

    irr::IrrlichtDevice *m_device;
    irr::scene::IAnimatedMeshSceneNode *m_Mesh;
    irr::core::vector3df m_Posi;

    int m_RotateSpeed, m_Speed, m_VitesseMax, m_VitesseEnCour;
};

#endif // EVENT_H_INCLUDED



Désoler de ne pas donner plus de code de mon jeu , j'ai peur qu'elle qu'un me copie tous se que j'ai fais pendant des mois...

Je sais vraiment pas ou est l'erreur.

Qu'elle qu'un peut-il m'aider ?

Hors ligne


#1 

01-03-2011 14:14:10

thesus
Membre
Date d'inscription: 11-08-2009
Messages: 19
Corrections: 1

Debug ton projet et regarde à quelle ligne ça plante.

Je suppose que tu ne sait pas utiliser le mode Debug (mais ça s'apprend vite) donc je vais faire un petit tuto :

sous CodeBlock :
- ajoute un point d'arret sur une ligne (clique à coté du n° de ligne, ça fait un point rouge, ou clique droit "Add breakpoint"), dans ton cas ce sera sur ton constructeur et/ou sur la fonction OnEvent (on peut en mettre autant que l'on veut et n'importe où).

- on lance le mode Debug (menu "Debug" puis "Start" ou plus simplement F8)

- ton programme va se lancer puis va s'arreter au point d'arret, pour qu'il avance il faut cliquer sur "Debug" "Next line" (ou l'icone correspondant dans la barre d'outils).

L'interet de ce mode est de savoir quelle ligne bloque, et surtout l'état des variables, pour les afficher il faut aller sur "Debug" "Debugging windows" "Watches"
Les pointeurs ne s'affichent pas directement, pour savoir ce qu'ils contiennent clique droit sur la variable (dans la fenetre Watches), puis "Deference pointer ???" (le reste est de l'anglais basique, donc tu devrais comprendre).

Si après ça tu ne peut toujours pas résoudre ton problème, repost ici (en disant quelle ligne bloque, et il est possible que ça ne bloque pas au niveau de l'event, dans ce cas la, met le point d'arret sur le main (c'est long, mais radical quand on ne sait pas quelle ligne fait bloquer le programme).


PS : Si j'ai expliquer tout ça c'est que le mode debug est une des choses les plus importantes de ton IDE, sans ça on ne peut pas faire de projets complexe.

PPS : Pour entrer dans une fonction, c'est "Step Into".

Hors ligne


#2 

11-03-2011 16:52:31

mmorpglefilm
Abonné
Lieu: la galaxie UDFy-38135539
Date d'inscription: 18-05-2010
Messages: 162
Site web

Je fais se que tu dit mes sa ne marche pas, quand je fais "debug>start" le programme se compile mes se lance pas.
Et je sur que c'est bien la ligne "m_device->setEventReceiver(&Evenement);" qui ne marche pas.

Alors j'ai fais :

if(m_device->getEventReceiver() == 0)
    m_device->setEventReceiver(&Evenement);
else
    std::cout<<"Erreur : il y a deja un event receiver actif."<<std::endl;

pour savoir s'il y a déjà un event receiver actif, se qui créait des bug, alors je voudrais savoir s'il y a une fonctions pour désactiver tous les gestionnaires d’évènement de la scène, j'ai déjà tester se truc mes sa marche pas....

m_device->setEventReceiver(0);

Qu'elle qu'un peut-il m'aider...

Hors ligne


#3 

15-03-2011 16:55:04

Hawk
Membre
Lieu: Wissous
Date d'inscription: 08-11-2008
Messages: 91
Site web

Sans plus d'information comme ça, je dirais que ça pourrait être un problème de portée.

Code c++ :


void une_certaine_méthode()
{
blabla ....
Event Evenement(m_device, m_VaisseauNode, m_Position, m_rotation, m_Aceleration, m_vitesse);
m_device->setEventReceiver(&Evenement);
...
}



Avec cette manière de créer ton Event, ce dernier est détruit à la fin de "une_certaine_méthode", et donc s'il est utilisé ailleurs (si ta boucle de jeu est en dehors de cette méthode), ben tu vas taper sur un pointeur vers un objet qui n'existe plus.
Mon conseil, c'est de créer ton objet avec new, et de stocker le pointeur quelque part pour faire un delete à la fin de ton programme.

Code c++ :


Event* Evenement = new Event(m_device, m_VaisseauNode, m_Position, m_rotation, m_Aceleration, m_vitesse);
m_device->setEventReceiver(Evenement);

Hors ligne


#4 

16-03-2011 00:21:10

mmorpglefilm
Abonné
Lieu: la galaxie UDFy-38135539
Date d'inscription: 18-05-2010
Messages: 162
Site web

Merci sa fonctionne !!!

Même si je peut plus utiliser ma camera, mes je vais m'en passer, mes sa serait quand même utile de lavoir.

Wtf, ma touche "^^" écrit deux fois un appuient qu'une fois !!!

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
Analysé par
880 membres
1424 sujets
11113 messages
Dernier membre inscrit: mandrifidy
12 invités en ligne
Aucun membre connecté
RSS Feed