#0 

03-10-2008 12:50:57

derrecks
Petit nouveau
Date d'inscription: 03-10-2008
Messages: 4

Bonjour,

Voici quelques temps que je m'amuser à tester les possibilités d'irrlicht, désirant aller un peu plus loin, j'aurais aimé créer un node personalisé ayant pour parent IAnimatedMeshSceneNode.

Malgré avoir suivi un tuto sur la création d'une classe personalisée pour les événements je bloque véritablement. (surtout au niveau des paramètres à passer)

Je cherche donc une piste, ou un bout de code que je pourrais prendre comme exemple pour la création de ma classe personalisée, car la, après moult essais infructueux rien n'a été concluent.

[PS] est-ce que je suis juste dans la création de ma classe et des paramètres du constructeur si on prend ce bout de code ? :

Code:

#ifndef CFPSANIMATEDNODE_H_INCLUDED
#define CFPSANIMATEDNODE_H_INCLUDED
// Include
#include <irr/irrlicht.h>

using namespace irr;
using namespace scene;

class CFPSAnimatedNode : public IAnimatedMeshSceneNode
{

 public:
  CFPSAnimatedNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
            const core::vector3df& position = core::vector3df(0,0,0),
            const core::vector3df& rotation = core::vector3df(0,0,0),
            const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f))
            : IAnimatedMeshSceneNode(parent, mgr, id, position, rotation, scale) {};
};
#endif // CFPSANIMATEDNODE_H_INCLUDED

Hors ligne


#1 

03-10-2008 13:14:29

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

Ma première question est: que cherches-tu à faire en final avec ta classe dérivée de IAnimatedMeshSceneNode.
Et quel soucis exact as-tu avec les paramètres à passer. Tu parles d'essais infructueux, peux-tu donner un ou deux bout de ces
codes, cela aiderait peut-etre à mieux cerner ton impasse wink

Dernière modification par tmyke (03-10-2008 13:15:28)


Force et sagesse...

Hors ligne


#2 

03-10-2008 13:55:12

derrecks
Petit nouveau
Date d'inscription: 03-10-2008
Messages: 4

En fait, je chercherais à créer un type de node qui pourrait gérer les mesh animé (comme justement IAnimatedMeshSceneNode) mais qui pourrait en plus gérer des informations propre au mesh ou plutot au noeud.

En faite (bis) j'en suis au tuto officiel 7 nommé "Collision", et j'aurais aimé mettre ce code un peu à ma sauce, en permettant d'agire sur des variables propre au noeud, un peu de la manière ou lorsque le pointeur (le viseur) est sur une des fées on leur passe le setMaterialFlag à false.

en gros pouvoir faire sa (au clic de souris par exemple):


                if (selectedSceneNode)
                        selectedSceneNode->setMaterialFlag(video::EMF_LIGHTING, false);
                        selectedSceneNode->diminueVie();

un noeud contenant des infomations comme la "vie" restante, et le fait qu'au dela d'un certain seuil (0) on supprime le node ou on affiche une autre frame, mais tout ceci à l'intérieur de cette classe pour après l'utiliser comme un node dans une classe de gestion d'événement.

oulala sa me semble pas trés clair tout sa, pourtant dans ma tête sa l'est big_smile

mon "blocus" se trouve plus simplement dans le fait que jusqu'a aujourd'hui je m'étais contenté d'utiliser les classes par défaut des bibliothèques, sans les modifier (sauf pour Qt), et que mes connaissances en la gestion de classes sont plutot basiques, il s'agit simplement d'un problême d'implémentation, je ne sais pas comment faire pour implémenter ma classe, voir la créer de manière juste, ou encore comment bien partir.

[EDIT] j'ai fait une classe perso pour les Evenements, quand j'appuie sur une touche je sais faire bouger un noeud, je voudrais dans ce cas la, ajouter un événement (le clic de la souris) (sa c'est ok je sais faire) et simplement à la place de faire monNode.X += newPosX faire monNode.diminueVie() (méthode de la classe que je sais pas comment implémenter)

Dernière modification par derrecks (03-10-2008 14:00:17)

Hors ligne


#3 

03-10-2008 17:19:35

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

derrecks :

mon "blocus" se trouve plus simplement dans le fait que jusqu'a aujourd'hui je m'étais contenté d'utiliser les classes par défaut des bibliothèques, sans les modifier (sauf pour Qt), et que mes connaissances en la gestion de classes sont plutot basiques, il s'agit simplement d'un problême d'implémentation, je ne sais pas comment faire pour implémenter ma classe, voir la créer de manière juste, ou encore comment bien partir.


effectivement, c'est plus un soucis d'implémentation, car c'est en fait relativement simple, tu est d'ailleurs très proche de la solution.

tu peux ecrire donc sans problème :

Code:

class CFPSAnimatedNode : public IAnimatedMeshSceneNode
{

 public:
  CFPSAnimatedNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
            const core::vector3df& position = core::vector3df(0,0,0),
            const core::vector3df& rotation = core::vector3df(0,0,0),
            const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f))
            : IAnimatedMeshSceneNode(parent, mgr, id, position, rotation, scale) {};

  void diminueVie();

  int num_vie;
};

et dans le code par exemple, il suffit d'ecrire:

Code:

    CFPSAnimatedNode* node = 0;

par exemple à la place de

Code:

par contre, dans le reste du code il ne faut pas oublier l'adaptation du pointeur,
et ecrire ceci:

Code:

        node = (CFPSAnimatedNode*) smgr->addAnimatedMeshSceneNode(faerie);

et donc en final, si tu ecris dans un endroit de ton code la sequence que tu donne en exemple
dans ton dernier message:

Code:

if (selectedSceneNode)
          {              selectedSceneNode->setMaterialFlag(video::EMF_LIGHTING, false);
                        selectedSceneNode->diminueVie();
           }

alors cela fonctionne sans soucis
wink

Dernière modification par tmyke (03-10-2008 17:23:54)


Force et sagesse...

Hors ligne


#4 

04-10-2008 16:48:23

derrecks
Petit nouveau
Date d'inscription: 03-10-2008
Messages: 4

Merci pour ta réponse bien complète.

A vrai dire, je me suis mal expliqué, ce que je ne sais pas implémenter c'est le CFPSAnimatedNode.cpp


Code:

CFPSAnimatedNode::CFPSAnimatedNode(que mettre ici ?) {
// le code
}

en mettant ceci :

Code:

CFPSAnimatedNode::CFPSAnimatedNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
            const core::vector3df& position = core::vector3df(0,0,0),
            const core::vector3df& rotation = core::vector3df(0,0,0),
            const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f)) {
// le code
}

j'ai une erreur tel que : error: Redefinition of CFPSAnimatedNode(....)

Dernière modification par derrecks (04-10-2008 16:49:21)

Hors ligne


#5 

04-10-2008 18:15:34

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

j'ecrirais plutôt:

Header

Code:

class CFPSAnimatedNode : public IAnimatedMeshSceneNode
{
 public:
  CFPSAnimatedNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
            const core::vector3df& position = core::vector3df(0,0,0),
            const core::vector3df& rotation = core::vector3df(0,0,0),
            const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f));
};

et Methodes:

Code:

CFPSAnimatedNode::CFPSAnimatedNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
            const core::vector3df& position,  const core::vector3df& rotation,   const core::vector3df& scale )
            : IAnimatedMeshSceneNode(parent, mgr, id, position, rotation, scale)
{
 code ....
}

j'espère avoir mieux cerné ce qui te posait problème...

___________________________________________________________________________________________________

Ceci étant, plutôt que de passer par un héritage, pourquoi ne pas créer ta propre classe, décorrelée des classe d'Irrlicht,
genre:

Code:

class PersoPlayer
{
    int num_vie;
    IAnimatedMeshSceneNode *pNode;

    PersoPlayer();
    ~PersoPlayer();
    DiminueVie();
    etc...
};

ce n'est qu'une suggestion....

Dernière modification par tmyke (04-10-2008 18:34:07)


Force et sagesse...

Hors ligne


#6 

04-10-2008 19:01:03

derrecks
Petit nouveau
Date d'inscription: 03-10-2008
Messages: 4

Un grand merci ! Désolé du malentendu, ce sont principalement mes connaissances en héritage qui me font défaut.

J'avais également pensé à créer une classe n'héritant pas d'une classe d'Irrlicht, mais cela me semblait plus simple de tout avoir dans un node, après ta première réponse ou tu me demandais pourquoi je voulais créer cette classe, n'ayant pas eu de remarque spéciale, je suis resté persuadé que j'étais "sur le bon chemin" du coup je n'ai pas été voir plus loin la seconde possibilité.

Dans un second temps sa me donne également une base "juste" pour créer des classes héritées d'Irrlicht, j'avais en gros besoin de voir un bout de code pour savoir comment partir, grace à sa, je devrais pouvoir me débrouiller plus ou moin convenablement avec cette bibliothèque.

C'est aussi et surtout sa que je cherchais à comprendre en faisant comme sa, bref, encore merci pour tes réponses et à bientôt smile

Hors ligne


#7 

04-10-2008 19:09:53

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

Pas de soucis, c'est un plaisir, on est la pour s'entraider...
wink


Force et sagesse...

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
881 membres
1427 sujets
11117 messages
Dernier membre inscrit: Bidule
33 invités en ligne
Aucun membre connecté
RSS Feed