#0 

14-11-2009 22:43:50

Ilovechocolat
Abonné
Date d'inscription: 07-10-2009
Messages: 125

Bonjour a tous !

Je poste ce sujet pour vous annoncer que j'ai un problème depuis que j'utilise les template, mais tout d abord voici les partis de mon code qui nous intéressent :

ElementScene.h

Code:

#ifndef ELEMENTSCENE_H_INCLUDED
#define ELEMENTSCENE_H_INCLUDED

#include <iostream>
#include <irr/irrlicht.h>
#include <FMOD/fmod.h>
#include <Newton/Newton.h>

#include "systemFonction.h"
#include "CEventReceiver.h"
#include "GameEngine.h"


class GameEngine;
template <typename T>
class ElementScene
{
public :
    T getNmodele() const
    {
        return m_Nmodele;
    }
    void setPosition(irr::core::vector3df position)
    {
        m_Nmodele->setPosition(position);
    }
protected :
    T m_Nmodele;
    GameEngine* m_scene;
    irr::video::IVideoDriver *m_driver;
    irr::scene::ISceneManager *m_sceneManager;
    irr::gui::IGUIEnvironment *m_gui;
    irr::IrrlichtDevice* m_device;
    irr::scene::IAnimatedMesh* m_modele;
};
typedef ElementScene<irr::scene::ISceneNode*> A;



#endif // ELEMENTSCENE_H_INCLUDED

Liquide.h

Code:

#ifndef LIQUIDE_H_INCLUDED
#define LIQUIDE_H_INCLUDED

#include <iostream>
#include <irr/irrlicht.h>
#include <FMOD/fmod.h>
#include <Newton/Newton.h>

#include "systemFonction.h"
#include "CEventReceiver.h"
#include "GameEngine.h"
#include "ElementScene.h"

class GameEngine;
class Liquide : public ElementScene<irr::scene::ISceneNode*>
{
public :
    Liquide();
    Liquide(GameEngine* scene, char* chemin_texture, irr::core::vector3df position, irr::core::vector3df rotation, long echelle, irr::f32 height, irr::f32 speed, irr::f32 lenght);
    ~Liquide();
private :

};

#endif // LIQUIDE_H_INCLUDED

Lors ce que j'appelle la fonction setPosition() a partir d'un objet de type Liquide, paf, une belle erreur a la ligne 25 de ElementScene.h, étrange car dans le constructeur de la class Liquide, on peut apercevoir ceci : "m_Nmodele->setPosition(position);".
C'est surement en lien avec les templates (c'est la première fois que je les utilises).
Comment on peut régler ce problème ?

Hors ligne


#1 

15-11-2009 00:14:00

TUpac
Habitué
Date d'inscription: 08-09-2009
Messages: 387
Corrections: 1

As-tu fait d'autres class dérivées de ton template ? elles mêmes castées en ISceneNode ? Et ça fonctionne?
Il me semble que la redéfinition de setPosition() est dangereuse si tu cast en ISceneNode (conflit).
Essaye peut-être de chager le nom ..
En plus le template est assez dangereux dans ton cas : que se passerait-il si tu castait en en autre chose qu'un ISceneNode ?

Code:

m_Nmodele->setPosition(position);

cette methode ne serait pas possible...


"Si vous ne partagez pas votre stabilité avec les pauvres, les pauvres partageront leur instabilité avec vous."

Hors ligne


#2 

15-11-2009 11:54:07

Ilovechocolat
Abonné
Date d'inscription: 07-10-2009
Messages: 125

Oui j'ai fait d'autres class dérivé de ElementScene mais castées en IAnimatedMeshSceneNode, mais la non plus, ça ne marche pas.
J'ai changé le nom en setPositionement mais cela ne marche toujours pas.
Voici comment j'appelle la fonction setPositionement() :

Code:

scene->getTableauLiquide(0)->setPositionement(irr::core::vector3df(0,50,0));

getTableauLiquide() renvoi un Liquide*.

Hors ligne


#3 

15-11-2009 11:54:51

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 910
Corrections: 2
Site web

tu ne doit pas utiliser "public ElementScene<irr::scene::ISceneNode*>" mais plutôt

template <typename T>
class Liquide : public ElementScene<T>

enfin c'est se genre de syntaxe que j'utiliserais après je n'en sais rien
tien d'ailleurs il en parle ici http://www.velocityreviews.com/forums/t … class.html

sinon pourquoi passer par des templates dans cette situation .... tout se que tu as besoins normalement se trouve dans ISceneNode ...

édit : j'avais pas tout lus ... donc oui la syntaxe ses ça ... mais est tu sur que le c++ reconnaisse le type que tu lui donne ? wink
je veut dire par la les templates sont utiliser pour les variables mais pas trop pour les pointeur excepter les concaténation ou les lists étant donner qu'a la déclaration 'T' peut-être n'importe quoi, ainsi il n'est connue qua la création de la class être peut être "utiliser" que pour des opération de pointeur ( delete/new/memcopy .... )

Dernière modification par Magun (15-11-2009 12:09:35)

Hors ligne


#4 

15-11-2009 12:44:41

Ilovechocolat
Abonné
Date d'inscription: 07-10-2009
Messages: 125

Magun->J'ai suivis ce que tu a dis, voici le nouveau code.

Code:

#ifndef ELEMENTSCENE_H_INCLUDED
#define ELEMENTSCENE_H_INCLUDED

#include <iostream>
#include <irr/irrlicht.h>
#include <FMOD/fmod.h>
#include <Newton/Newton.h>

#include "systemFonction.h"
#include "CEventReceiver.h"
#include "GameEngine.h"

class GameEngine;

template <typename T>
class ElementScene
{
public :
    T* getNmodele() const
    {
        return m_Nmodele;
    }
    void setPositionement(irr::core::vector3df position)
    {
        m_Nmodele->setPosition(position);
    }
protected :
    T* m_Nmodele;
    GameEngine* m_scene;
    irr::video::IVideoDriver *m_driver;
    irr::scene::ISceneManager *m_sceneManager;
    irr::gui::IGUIEnvironment *m_gui;
    irr::IrrlichtDevice* m_device;
    irr::scene::IAnimatedMesh* m_modele;
};

#endif // ELEMENTSCENE_H_INCLUDED

et pour Liquide.h:
class Liquide : public ElementScene<irr::scene::ISceneNode*>
devient:
class Liquide : public ElementScene<irr::scene::ISceneNode>

Les erreurs sont par contre toujours au rendez vous.

Dernière modification par Ilovechocolat (15-11-2009 13:21:44)

Hors ligne


#5 

15-11-2009 13:50:05

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 910
Corrections: 2
Site web

je pensse que tu n'a pas vraiment comprit se que je disais tu ne peut pas utiliser les templates dans ce contexte
par exmples :

en math tu a une variable inconue 'x' ( int x; )
tu ne peut pas connaitre 'x' ( cout << x; te renverras alors un chiffre "aléatoire" )

donc en gros tu essaye de faire des operation "direct" sur un pointeur inconue bien que sont adresse memoire soit connue sont type ne les pas
se que tu as fait ne change rien ... tu utilise toujours les pointeur il faut donc que tu cast 'T' ( ((ISceneNode*)m_Nmodele)->fonction ... ) sinon tu ne peut utiliser '->' ou '.'

Code:

class GameEngine;

    T* getNmodele() const
    {
        return m_Nmodele;
    }
    void setPositionement(irr::core::vector3df position)
    {
        ((ISceneNode*)m_Nmodele)->setPosition(position);
    }

ses comme si tu remplacais 'T*' par 'void*'
pensse tu pouvoire faire "void *m_Nmodele;  m_Nmodele->setPosition(...);" ?

Dernière modification par Magun (15-11-2009 13:53:21)

Hors ligne


#6 

15-11-2009 15:30:38

Ilovechocolat
Abonné
Date d'inscription: 07-10-2009
Messages: 125

Oui mais le problème maintenant (ceci est une supposition) c'est que je suis obligé de fonctionner avec un ISceneNode.
En effet j'avais écris une autre class :

Code:

#ifndef OBJET_H_INCLUDED
#define OBJET_H_INCLUDED

#include <iostream>
#include <irr/irrlicht.h>
#include <FMOD/fmod.h>
#include <Newton/Newton.h>

#include "systemFonction.h"
#include "CEventReceiver.h"
#include "GameEngine.h"
#include "ElementScene.h"

class GameEngine;
class Objet : public ElementScene<irr::scene::IAnimatedMeshSceneNode>
{
public :
    Objet();
    Objet(GameEngine* m_scene, char* chemin_modele, char* chemin_texture, irr::core::vector3df position, irr::core::vector3df RotationDegrees, long echelle, Collision collision);
    Objet(GameEngine* m_scene, char* chemin_modele, char* chemin_texture, irr::core::vector3df position, irr::core::vector3df rotationDegrees, long echelle, Collision collision, int animDebut, int animFin);
    ~Objet();
private :

};

#endif // OBJET_H_INCLUDED

EDIT : Bon ben après test, ça ne marche toujours pas (toujours la même erreur) :

Code:

#ifndef ELEMENTSCENE_H_INCLUDED
#define ELEMENTSCENE_H_INCLUDED

#include <iostream>
#include <irr/irrlicht.h>
#include <FMOD/fmod.h>
#include <Newton/Newton.h>

#include "systemFonction.h"
#include "CEventReceiver.h"
#include "GameEngine.h"

class GameEngine;

template <typename T>
class ElementScene
{
public :
    T getNmodele() const
    {
        return m_Nmodele;
    }
    void setPositionement(irr::core::vector3df position)
    {
        ((irr::scene::ISceneNode*)m_Nmodele)->setPosition(position);
    }
protected :
    T m_Nmodele;
    GameEngine* m_scene;
    irr::video::IVideoDriver *m_driver;
    irr::scene::ISceneManager *m_sceneManager;
    irr::gui::IGUIEnvironment *m_gui;
    irr::IrrlichtDevice* m_device;
    irr::scene::IAnimatedMesh* m_modele;
};

#endif // ELEMENTSCENE_H_INCLUDED

Dernière modification par Ilovechocolat (15-11-2009 17:05:41)

Hors ligne


#7 

15-11-2009 17:00:31

TUpac
Habitué
Date d'inscription: 08-09-2009
Messages: 387
Corrections: 1

Dacord avec Magun, tu ne dois pas caster ce genre d'objets, ils sont trop complexes et hérités de nombreuses fois. Je te conseille de refaire des class dérivées de IAnimatedScenenode* qui sera "rétrocompatible" avec un ISceneNode* classique. Mais les templates sont contre-indiqués pour ce que tu veux faire.


"Si vous ne partagez pas votre stabilité avec les pauvres, les pauvres partageront leur instabilité avec vous."

Hors ligne


#8 

15-11-2009 17:19:23

Ilovechocolat
Abonné
Date d'inscription: 07-10-2009
Messages: 125

TUpac :

Je te conseille de refaire des class dérivées de IAnimatedScenenode* qui sera "rétrocompatible" avec un ISceneNode* classique.


Aie, alors la je suis complètement perdu.

Hors ligne


#9 

15-11-2009 17:22:35

TUpac
Habitué
Date d'inscription: 08-09-2009
Messages: 387
Corrections: 1

big_smile Si j'ai bien compris tu veux faire des objets dérivés soit de ISceneNode soit de IAnimatedSceneNode. Etant donné que IAnimatedSceneNode est dérivé de ISceneNode, si tu fait une class dérivé de IAnimatedSceneNode tu pourra faire des fonction communes aux deux types. Ca demande pas des masses de taf, t'as juste les entêtes à modifier.

Dernière modification par TUpac (15-11-2009 17:23:44)


"Si vous ne partagez pas votre stabilité avec les pauvres, les pauvres partageront leur instabilité avec vous."

Hors ligne


#10 

16-11-2009 11:51:35

Ilovechocolat
Abonné
Date d'inscription: 07-10-2009
Messages: 125

Ben la j'ai toujours pas compris, la dérivation c'est bien ce qui est traité ici (2° partie) ?
C'est un concepts que je n'ai pas encore étudié, je suis un peut perdu, voici ce que je comprend (dit le moi si j'ai tort) :
Tu veut dire par " Etant donné que IAnimatedSceneNode est dérivé de ISceneNode" que IAnimatedSceneNode hérite de ISceneNode".
Et voici ce que je ne comprend pas :
"si tu fait une class dérivé de IAnimatedSceneNode tu pourra faire des fonction communes aux deux types."

Dernière modification par Ilovechocolat (16-11-2009 11:52:06)

Hors ligne


#11 

16-11-2009 15:43:29

TUpac
Habitué
Date d'inscription: 08-09-2009
Messages: 387
Corrections: 1

Oui c'est tout à fait ça.

ISceneNode -> IAnimatedSceneNode -> MaClassNode
       |                             |                         | |
       |                             |---------<---------| |
       |---------------------------------<-----------|

Si tu crée un IAnimated, tu crée un ISceneNode, y'a rien de compliqué je crois. Donc pas d'interret évident à caster (chager de type) ta class en l'un ou l'autre, il suffit de la créer en IAnim (le plus haut niveau).
Ca prend surement plus de place en mémoire mais c'est pas grave : on est plus sous To7 tongue


"Si vous ne partagez pas votre stabilité avec les pauvres, les pauvres partageront leur instabilité avec vous."

Hors ligne


#12 

16-11-2009 18:00:45

Ilovechocolat
Abonné
Date d'inscription: 07-10-2009
Messages: 125

Le problème c'est que certaines fonctions (addWaterSurfaceSceneNode() par exemple) semblent ne pas accepter les IAnimatedMeshSceneNode.

Hors ligne


#13 

16-11-2009 19:17:49

TUpac
Habitué
Date d'inscription: 08-09-2009
Messages: 387
Corrections: 1

C'est la que ça devient plus fastidieux je te l'accorde. En tout cas c'est possible (j'ai quand-même tésté pour pas dire de bétises tongue).

Code:

IAnimatedMeshSceneNode* node = (IAnimatedMeshSceneNode*)smgr->addWaterSurfaceSceneNode(... , ... , ...);

le cast fonctionne très bien chez moi...


"Si vous ne partagez pas votre stabilité avec les pauvres, les pauvres partageront leur instabilité avec vous."

Hors ligne


#14 

16-11-2009 20:36:06

Ilovechocolat
Abonné
Date d'inscription: 07-10-2009
Messages: 125

Cool, merci je vais tester ça

EDIT : Rhoo, ça marche toujours pas !!!
Toujours un bug ... a la même instruction.

ElementScene.h

Code:

#ifndef ELEMENTSCENE_H_INCLUDED
#define ELEMENTSCENE_H_INCLUDED

#include <iostream>
#include <irr/irrlicht.h>
#include <FMOD/fmod.h>
#include <Newton/Newton.h>

#include "systemFonction.h"
#include "CEventReceiver.h"
#include "GameEngine.h"

class GameEngine;

class ElementScene
{
public :
    irr::scene::IAnimatedMeshSceneNode* getNmodele() const;
    void setPositionement(irr::core::vector3df position);
protected :
    irr::scene::IAnimatedMeshSceneNode* m_Nmodele;
    GameEngine* m_scene;
    irr::video::IVideoDriver *m_driver;
    irr::scene::ISceneManager *m_sceneManager;
    irr::gui::IGUIEnvironment *m_gui;
    irr::IrrlichtDevice* m_device;
    irr::scene::IAnimatedMesh* m_modele;
};

#endif // ELEMENTSCENE_H_INCLUDED

ElementScene.cpp

Code:

#include "ElementScene.h"

irr::scene::IAnimatedMeshSceneNode* ElementScene::getNmodele() const
{
    return m_Nmodele;
}
void ElementScene::setPositionement(irr::core::vector3df position)
{
    m_Nmodele->setPosition(position);
}

Liquide.h

Code:

#ifndef LIQUIDE_H_INCLUDED
#define LIQUIDE_H_INCLUDED

#include <iostream>
#include <irr/irrlicht.h>
#include <FMOD/fmod.h>
#include <Newton/Newton.h>

#include "systemFonction.h"
#include "CEventReceiver.h"
#include "GameEngine.h"
#include "ElementScene.h"

class GameEngine;
class Liquide : public ElementScene
{
public :
    Liquide();
    Liquide(GameEngine* scene, char* chemin_texture, irr::core::vector3df position, irr::core::vector3df rotation, long echelle, irr::f32 height, irr::f32 speed, irr::f32 lenght);
    ~Liquide();
private :

};

#endif // LIQUIDE_H_INCLUDED

Liquide.cpp

Code:

#include "Liquide.h"

Liquide::Liquide()
{}
Liquide::Liquide(GameEngine* scene, char* chemin_texture, irr::core::vector3df position, irr::core::vector3df rotation, long echelle, irr::f32 height, irr::f32 speed, irr::f32 lenght)
{
    m_scene = scene;
    m_device = scene->getDevice();
    m_driver = m_device->getVideoDriver ();
    m_sceneManager = m_device->getSceneManager();    

    m_modele = m_sceneManager->addHillPlaneMesh( "myHill",
            irr::core::dimension2d<irr::f32>(20,20),
            irr::core::dimension2d<irr::u32>(40,40), 0, 0,
            irr::core::dimension2d<irr::f32>(0,0),
            irr::core::dimension2d<irr::f32>(10,10));
    m_Nmodele = (irr::scene::IAnimatedMeshSceneNode*)m_sceneManager->addWaterSurfaceSceneNode(m_modele->getMesh(0, height, speed, lenght));
    irr::video::ITexture* textureWater = m_driver->getTexture(chemin_texture);
    m_Nmodele->setPosition(position);
    m_Nmodele->setRotation(rotation);
    m_Nmodele->setScale(irr::core::vector3df(echelle,echelle,echelle));
    m_Nmodele->setMaterialTexture(0, textureWater);
    m_Nmodele->getMaterial(0).MaterialType = irr::video::EMT_TRANSPARENT_ALPHA_CHANNEL;
}
Liquide::~Liquide(){}

Dernière modification par Ilovechocolat (16-11-2009 21:01:30)

Hors ligne


#15 

16-11-2009 22:19:28

TUpac
Habitué
Date d'inscription: 08-09-2009
Messages: 387
Corrections: 1

très bizzard !! t'as éssayé de rendre to m_Nmodele public ? normalement y'a pas de raison. En tout cas ton organisation est bien bonne.


"Si vous ne partagez pas votre stabilité avec les pauvres, les pauvres partageront leur instabilité avec vous."

Hors ligne


#16 

17-11-2009 21:28:28

Ilovechocolat
Abonné
Date d'inscription: 07-10-2009
Messages: 125

oui, j'ai essayé mais y a pas moyen, ça ne marche pas sad

Hors ligne


#17 

18-11-2009 01:39:24

TUpac
Habitué
Date d'inscription: 08-09-2009
Messages: 387
Corrections: 1

Tu as débugué? c'est quoi l'insulte que te lance le compilateur ? tongue


"Si vous ne partagez pas votre stabilité avec les pauvres, les pauvres partageront leur instabilité avec vous."

Hors ligne


#18 

18-11-2009 12:12:22

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 910
Corrections: 2
Site web

le plus simple reste de nous passer un code minimal avec l`erreur en qestion ..
mais je ne peut t`aider que le weekend

surtout que l`on t`aide depuis le debut sant connaitre ton erreur hmm

Hors ligne


#19 

18-11-2009 12:19:08

Ilovechocolat
Abonné
Date d'inscription: 07-10-2009
Messages: 125

Ben le mieux c'est que j'envoie l'archive complète de mon projet comme ça je suis sure de rien oublier. télécharger
Sinon, voici l'insulte du compilo :

Code:

Exception de première chance à 0x009cf0d3 dans Jeu1.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0xcccccccc.
Exception non gérée à 0x009cf0d3 dans Jeu1.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0xcccccccc.

Je crois pas que ça veuille dire grand chose (si mes souvenirs sont bons, exception non géré ça veut dire "Mais t'es fou ou quoi ... Pourquoi t'as provoqué une erreur que je connait pas ?").

Dernière modification par Ilovechocolat (18-11-2009 12:37:24)

Hors ligne


#20 

18-11-2009 12:41:57

TUpac
Habitué
Date d'inscription: 08-09-2009
Messages: 387
Corrections: 1

Oki ça sera bien plus simple je regarde ...
Ceci dit l'insulte ici c'est plutôt : "Mais t'es fous ou quoi !! je n'ai pas le droit de lire cet emplacement mémoire"

après test :
Bon j'ai lancé ton jeu aprè avoir téléchargé 200 mo de libs :p
Le jeu fonctionne bien mais je n'ai pas vu de Liquide déclaré ...
J'en ai fait un à la vas-vite dans le main et la mon compilateur me dit : "La classe Liquide n'as pas de constructeur" !!!! lol
J'vais bosser j'y retourne ce soir a+

Dernière modification par TUpac (18-11-2009 13:47:52)


"Si vous ne partagez pas votre stabilité avec les pauvres, les pauvres partageront leur instabilité avec vous."

Hors ligne


#21 

18-11-2009 13:51:20

Ilovechocolat
Abonné
Date d'inscription: 07-10-2009
Messages: 125

le Liquide est déclaré ligne 234 de actionEvent.cpp (en fait il est vraiment déclaré dans gameEngine.cpp mais la fonction ajouterLiquide() crée un liquide et revoie un Liquide*)
il est utilisé ligne 265 de actionEvent.cpp
Il est appelé quand tu parle au PNJ de droite (pour la deuxième fois je crois).

On ne peut pas déclarer de Liquide, d'Objet, de Personnage, de CEventReceiver ou bien d'Event sans paramètre (en fait les constructeur par défaut sont juste la pour éviter les message d'erreur du compilo)

Les commandes du jeu sont:
z : avancer
s: reculer
q: tourner a gauche
d: tourner a droite
space: sauter (mon système de saut n'est pas encore tout a fait au point mais pour les tests, je m'en contente)
enter: interagir avec un PNJ
flèche haut: déplacer la caméra vers le haut
flèche bas: déplacer la caméra vers le bas
p: afficher le menu
Je crois que c'est tout

ça compile avec la version 1.6 de irrlicht et fmod

Si tu a besoin d'autre chose, demande moi.
Merci pour ton aide

Dernière modification par Ilovechocolat (18-11-2009 14:04:53)

Hors ligne


#22 

18-11-2009 14:35:36

TUpac
Habitué
Date d'inscription: 08-09-2009
Messages: 387
Corrections: 1

J'ai utilisé le constructeur avec tout les paramêtres. C'est surement un problème de surcharge.


"Si vous ne partagez pas votre stabilité avec les pauvres, les pauvres partageront leur instabilité avec vous."

Hors ligne


#23 

18-11-2009 22:10:28

TUpac
Habitué
Date d'inscription: 08-09-2009
Messages: 387
Corrections: 1

Bon ben c'est un vrai casse tête ton truc ! Peut-être une piste, cette ligne me pose problème à l'execution.

Code:

Event.cpp l-19

m_modele = (irr::scene::IAnimatedMeshMD2*)m_sceneManager->getMesh(chemin_modele);

Le débuger me donne des valeurs invalides à la fois sur chemin_modele & m_sceneManager. Traduit du banlieusard en français soutenu ça donne ça :"Impossible d'évaluer l'expression". Ce qui est plus bizard c'est que quand j'ai compilé en premier, je n'ai dailleur que linké en utilisant tes fichiers précompilés, le jeu s'est lancé direct seulement il n'y avait d'eau nulle part. J'ai ajouté manuellement un Liquide et en recompilant le main, plus rien ne marchait !! sad
J'arrete pour ce soir mal au crane tiens moi au jus wink

Dernière modification par TUpac (18-11-2009 22:11:39)


"Si vous ne partagez pas votre stabilité avec les pauvres, les pauvres partageront leur instabilité avec vous."

Hors ligne


#24 

19-11-2009 12:57:40

Ilovechocolat
Abonné
Date d'inscription: 07-10-2009
Messages: 125

Bon OK, j'avoue mon code est pas super clair.

Alors la class principale c'est GameEngine, elle gère beaucoup de chose et  toutes les autres class en ont besoin pour fonctionner (a part Personnage).
Après il y a la class CEventReceiver qui elle, gère les évenement et les mise a jours de la scène (mise a part les PNJ).
Les class Liquide et Objet gèrent les objets du décor, elles héritent de ElementScene (c'est cette partie que j'ai pas arrête de poster et modifier le long de ce topic).
Dans les fichiers systemFonction, il y a des structures et des fonctions mais je ne pense pas que tu ai besoin de t'en servir.
Après il y a la class qui gère les PNJ c' est Event (c'est vrai ça peut prêter confusion avec CEventReceiver, c'est le therme de RPG Maker).
Chaque objet de type Event a un pointeur sur fonction qui défini ce qu'il fait quand on lui parle, ces fonctions sont dans actionEvent, elles sont inclus dans le boucle principale.
Pour ajouter un Liquide ou un objet, j'ai créé des méthodes dans le GameEngine : ajouterLiquide et ajouterObjet, ces fonctions créent un Liquide ou un Objet et renvoi un pointeur sur ce qui a été créé.
Comme je te l'ai dis précédemment, le Liquide est déclaré ligne 234 de actionEvent.cpp et il est utilisé a la ligne 265 du même fichier.
Ces fonctions sont dans actionEvent donc elles sont donc pointé par un Event et inclus dans la boucle principal.
La fonction ajouterLiquide est appelé quand tu parle au PNJ de droite pour la deuxième fois et sa méthode setPositionement est appelé quand tu lui parle pour la troisième fois.

Voila, si tu ne comprend toujours pas, dis le moi.

Dernière modification par Ilovechocolat (20-11-2009 13:27:24)

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
63 invités en ligne
Aucun membre connecté
RSS Feed