#1 

01-03-2011 01:47:08

mmorpglefilm
Membres
Avatar de mmorpglefilm
Date d'inscription:
Messages: 162
IP: 78.122.188.125
Courriel  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


#2 

01-03-2011 13:14:10

thesus
Membres
Avatar de thesus
Date d'inscription:
Messages: 19
IP: 90.58.40.116
Courriel

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


#3 

11-03-2011 15:52:31

mmorpglefilm
Membres
Avatar de mmorpglefilm
Date d'inscription:
Messages: 162
IP: 109.8.16.197
Courriel  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


#4 

15-03-2011 15:55:04

Hawk
Membres
Date d'inscription:
Messages: 91
IP: 91.103.40.50
Courriel  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


#5 

15-03-2011 23:21:10

mmorpglefilm
Membres
Avatar de mmorpglefilm
Date d'inscription:
Messages: 162
IP: 78.122.230.21
Courriel  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é
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
168 invités en ligne
membre en ligne: -
RSS Feed