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.
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
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
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 .
Non sans déconner, Merci beaucoup pour ta contribution .
Hors ligne
dr je penser mettre en ligne plusieurs de met classe que j'utilise dans mon mmorpg afin d'aider d autre personne
Hors ligne
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
sympa cette class ^^
m'ci
ps : pour l'améliorer rajoute la possibilité de mettre du bump, shaders, .... etc
edit : tien mais je n'est pas encore donner de code moi aussi .... a mais oui ses vrai j'avais oublier .... ses pas fini =_=
Hors ligne
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.
Hors ligne
merci, ça me servira surement plus tard pour faire mes propres classes.
Hors ligne
Merci, ça à l'air très interessant
Hors ligne