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.