#0 

16-06-2008 22:01:46

hardcpp
Abonné
Date d'inscription: 26-04-2008
Messages: 229

Bonjour ceci est ma première routine que je poste sur le forum alors svp soyer l'indulgent

Cette classe permet ajouter des joueur/model 3d sans faire 15 ligne de code par modele est peut servir surtout pour les débutant moi je men serre dans mon MMORPG amateur.

player.hplayer.cppmain.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#ifndef DEF_PLAYER    //pour éviter les inclusion multiple
#define DEF_PLAYER

#include <irr\irrlicht.h>           //moteur 3d

using namespace irr;      // namespace
using namespace core;   // namespace
using namespace scene; // namespace
using namespace video; // namespace
using namespace io;      // namespace
using namespace gui;    // namespace
using namespace std;    // namespace

class Player
{
      public:
             Player();        // constructeur
             ~Player();     // destructeur
             
             void CreatePlayer(video::IVideoDriver* driver, scene::ISceneManager* smgr, char model[256], char Texture[256], irr::core::vector3df position, irr::core::vector3df rotation, irr::core::vector3df scale);  // pour cree le nouveau player
             void CreateBillboard(video::IVideoDriver* driver, scene::ISceneManager* smgr, char image[256], int x, int y);  // pour ajouter un billoard au dessu du player
           
             //pour cette partie je me passe de commentaire

             void setPosition(irr::core::vector3df Pposition);
             void setRotation(irr::core::vector3df Protation);
             void setFrameLoop(int debut, int fin);
                     
             IAnimatedMeshSceneNode* getPlayer();
             
             irr::core::vector3df getPosition();
             
             double getPositionX();
             double getPositionY();
             double getPositionZ();
             double getRotationX();
             double getRotationY();
             double getRotationZ();
             
             irr::core::vector3df getRotation();
             
             void Update();
             
      private:
             IAnimatedMeshSceneNode* NodePlayer;                 // le node du player
             
             irr::scene::IBillboardSceneNode *bilo;                    // le billoard
             
             irr::core::vector3df NodePlayerVector;                   // vector 3d
             irr::core::vector3df NodePlayerRotationVector;       // vector 3d
             
             video::ITexture *TXTbiloard;                                 // texture du billboard
             
             char FileModel[256];
             char FileTexture[256];
};

#endif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132

#include "player.h"

#include <irr\irrlicht.h>
#include <stdio.h>
#include <stdlib.h>

using namespace irr;   // namespace
using namespace core;  // namespace
using namespace scene; // namespace
using namespace video; // namespace
using namespace io;    // namespace
using namespace gui;   // namespace
using namespace std;   // namespace

Player::Player()
{               
}
Player::~Player()
{               
}

/* ---------------------------------------- */
/* ---------------------------------------- */
/* ---------------------------------------- */

void Player::CreatePlayer(video::IVideoDriver* driver,
                          scene::ISceneManager* smgr,
                          char model[256],
                          char Texture[256],
                          irr::core::vector3df position,
                          irr::core::vector3df rotation,
                          irr::core::vector3df scale
                          )
{
      strcpy(FileModel, model);
      strcpy(FileTexture, Texture);
     
     
     
      IAnimatedMesh* mesh = smgr->getMesh(model);
        NodePlayer = smgr->addAnimatedMeshSceneNode(mesh); 
        NodePlayer->setMaterialFlag(EMF_LIGHTING, false);
      NodePlayer->setMaterialTexture( 0, driver->getTexture(Texture));
      NodePlayer->setPosition(position);
      NodePlayer->setScale(scale);
}
void Player::CreateBillboard(video::IVideoDriver* driver, scene::ISceneManager* smgr, char image[256], int x, int y)
{
     bilo = smgr->addBillboardSceneNode(NULL, core::dimension2d<f32>(x, y), NodePlayer->getPosition());
     bilo->setMaterialFlag(irr::video::EMF_LIGHTING, false);
     bilo->setMaterialType(irr::video::EMT_TRANSPARENT_ADD_COLOR);
     TXTbiloard = driver->getTexture(image);
     bilo->setMaterialTexture(0,TXTbiloard);                       
}

/* ---------------------------------------- */
/* ---------------------------------------- */
/* ---------------------------------------- */

void Player::setPosition(irr::core::vector3df Pposition)
{
      NodePlayer->setPosition(Pposition);           
}

/* ---------------------------------------- */

void Player::setRotation(irr::core::vector3df Protation)
{
     NodePlayer->setRotation(Protation);               
}

/* ---------------------------------------- */
/* ---------------------------------------- */
/* ---------------------------------------- */

IAnimatedMeshSceneNode* Player::getPlayer()
{
     return NodePlayer;
}

/* ---------------------------------------- */

irr::core::vector3df Player::getPosition()
{
     return NodePlayer->getPosition();
}
double Player::getPositionX()
{
     return NodePlayer->getPosition().X;
}
double Player::getPositionY()
{
     return NodePlayer->getPosition().Y;
}
double Player::getPositionZ()
{
     return NodePlayer->getPosition().Z;
}
/* ---------------------------------------- */

irr::core::vector3df Player::getRotation()
{
     return NodePlayer->getRotation();               
}
double Player::getRotationX()
{
     return NodePlayer->getRotation().X;
}
double Player::getRotationY()
{
     return NodePlayer->getRotation().Y;
}
double Player::getRotationZ()
{
     return NodePlayer->getRotation().Z;
}

/* ---------------------------------------- */

void Player::setFrameLoop(int debut, int fin)
{
     NodePlayer->setFrameLoop(debut, fin);
}

/* ---------------------------------------- */
/* ---------------------------------------- */
/* ---------------------------------------- */

void Player::Update()
{
     bilo->setPosition(vector3df(NodePlayer->getPosition().X, NodePlayer->getPosition().Y + 75,NodePlayer->getPosition().Z));
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

#include <irr\irrlicht.h>
#include "player.h"


using namespace irr;   // namespace
using namespace core;  // namespace
using namespace scene; // namespace
using namespace video; // namespace
using namespace io;    // namespace
using namespace gui;   // namespace
using namespace std;   // namespace

int main()
{
         IrrlichtDevice *device = createDevice( video::EDT_SOFTWARE, dimension2d<s32>(640, 480), 16, false, false, false, 0);
    IVideoDriver* driver = device->getVideoDriver();
    ISceneManager* smgr = device->getSceneManager();

        Player player;
        player.CreatePlayer(driver, smgr, "sydney.md2", "sydney.bmp", vector3df(326.592804, 400.892242, 390.750366), vector3df(2.000000, 1.5, 2.000000), vector3df(2.0, 1.5, 2.0));
       player.CreateBillboard(driver, smgr, "nom.bmp", 78, 58);
       player.setFrameLoop(0, 150);

        while(device->run())
    {
                player.Update();
        driver->beginScene(true, true, SColor(255,100,101,140));
        smgr->drawAll();
        driver->endScene();
    }
}


Liste des fonction
-CreatePlayer
->pour crée un nouveau joueur

-CreateBillboard
->Pour cree un billboard

-setPosition
->Pour définir la position

-setRotation
->Pour définir la rotation

-setFrameLoop
->Pour définir les frame d'animation

-getPlayer
->Pour récupéré le IAnimatedMeshSceneNode du player

-getPosition
->Pour recuperer la position du player

-getPositionX
-getPositionY
-getPositionZ
->Pour récupérer les valeur de chaque parametre de position separement

-getRotationX
-getRotationY
-getRotationZ
->Pour recuperer les valeur de chaque parametre de rotation separement

-getRotation
->Pour récupérer la rotation du player

-Update
->Pour Mettre a jour la position du billboard


ATTENTION
N'OUBLIER PAS D'UTILISER LA FONCTION UPDATE SI VOUS UTILISER UN BILLBOARD


Bon ben voila. j'espère que sa poura aider quelque personne et tant donner que c'est ma première aide.

Hors ligne


#1 

17-06-2008 18:04:15

hardcpp
Abonné
Date d'inscription: 26-04-2008
Messages: 229

personne?

Hors ligne


#2 

17-06-2008 23:10:46

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

Si y'a du monde qui pompe sans doute mais personne n'a dit merci donc je m'en charge pour eux, excuse les ils sont pas sociable big_smile.
Non sans déconner, Merci beaucoup pour ta contribution wink.


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#3 

18-06-2008 08:47:05

hardcpp
Abonné
Date d'inscription: 26-04-2008
Messages: 229

dr je penser mettre en ligne plusieurs de met classe que j'utilise dans mon mmorpg afin d'aider d autre personne

Hors ligne


#4 

18-06-2008 08:49:42

hardcpp
Abonné
Date d'inscription: 26-04-2008
Messages: 229

dsl pour le double post jai aussi des idée d'amélioration de cette classe:

-laissez plus de souplesse de paramètre pour le billboard
-récupérer le billboard du billboard crée dans la classe
-ajouter une fonction pour definir la vitesse d'animation
-possibilité d'utiliser plusieurs texture...

Hors ligne


#5 

18-06-2008 17:32:53

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

sympa cette class ^^
m'ci smile

ps : pour l'améliorer rajoute la possibilité de mettre du bump, shaders, .... etc wink

edit : tien mais je n'est pas encore donner de code moi aussi big_smile .... a mais oui ses vrai j'avais oublier .... ses pas fini =_=

Hors ligne


#6 

18-06-2008 21:29:25

maitrelame12545
Membre
Date d'inscription: 28-11-2006
Messages: 51

Tu pourrais ne pas utiliser la fonction CreatePlayer en utilisant le constructeur car comme je t'ai dis une classe qui a besoin d'une autre fonction que le constructeur pour être initialisé est une classe mal fichu ^^ .
Dans le destructeur tu peux détruire tes pointeurs pour ne pas avoir de problème de fuite.
Tes chaines de char crée un pointeur et alloue dynamiquement un tableau de la même taille que le paramètre texture passé, tu gagnes ainsi en mémoire et si il y a dépassement tu n'aura pas de blem d'injection...
Les namespaces devant les fonctions et les variables sont inutiles car elles sont déclarés en haut de ton fichier.
Et pour finir utilise les inlines pour les Get tu gagneras ainsi en performance, je sais plus si tout les membres d'une classe sont inline ou seulement celle qui sont déclaré dans le header...

Bref voila ^^
Sinon c'est très gentil de passé ton travail.


Codeur elewendyl

Hors ligne


#7 

19-06-2008 03:23:19

noals
Membre
Date d'inscription: 17-05-2008
Messages: 34

merci, ça me servira surement plus tard pour faire mes propres classes.

Hors ligne


#8 

24-06-2008 16:46:45

BooBs
Petit nouveau
Date d'inscription: 24-06-2008
Messages: 8

thnx man c du bon boulot

Hors ligne


#9 

21-02-2009 17:34:28

NeoCrysis
Membre
Date d'inscription: 20-02-2009
Messages: 11

Merci, ça à l'air très interessant smile

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