- ---------------------------
RESOLU, merci Capry 
- ---(solution en bas)-----
Bonjour (c'est mon premier message, je me suis retenu le plus possible je vous assure !),
Je fais appel à vous car j'ai un problème (et oui sinon je ne posterai pas xD) :
- Cela fait X temps (2 jours plus ou moins) que je ne parviens pas à faire bouger ma petite Sydney (fox ?) comme il le faudrait, elle ne suit pas la direction de ma souris, si je regarde au nord-est et que j'appuie sur la touche avancer, ça ira tout droit et non au nord-est.
Je sais que cette question à déjà été posée et que vous devez en avoir raz la casquette de voir défiler des débutants en quete du FPS fabuleux, mais ce n'est pas mon cas, je veux apprendre et ce problème est un frein à mon imagination ^^.
Ca fait 3 jours que j'utilise Irrlicht (avant je faisais du PHP/JS/C++/Qt), donc c'est tout nouveau, je ne me suis pas encore bien familiarisé avec ce merveilleux outil

Ce qui veut dire aussi que mon code est surement mal fichu et faux, mais je vous le donne quand même

(Il fonctionne parfaitement à l'heure actuelle)
main.cpp (utile ?..)
int main(void)
{
Demo demo(false);
demo.initWorld();
demo.initPerso();
demo.initCamera();
demo.initLumiere();
demo.startGame();
return 0;
}
demo.h #ifndef H_DEMO
#define H_DEMO
#include "FollowingCamera.h"
#include <IRR/irrlicht.h>
class Demo
{
public :
Demo(bool fullscreenc);
~Demo();
void initWorld(); // Initialisation de l'environnement
void initPerso(); // Initialisation des acteurs
void initCamera(); // Initialisation de la camera
void initLumiere(); // Initialisation de la lumière
void initKeys(); // Initialisation des commandes
void startGame(); // Lancement du jeu
void changeView();
bool cam_thirdPerson;
//virtual bool OnEvent(const SEvent& event);
IrrlichtDevice* device;
irr::scene::IAnimatedMeshSceneNode* Nmodele;
FollowingCamera* MaCamera;
ITriangleSelector* selector;
ITriangleSelector* selector2;
ITerrainSceneNode* terrain;
private :
bool fullscreen;
scene::ICameraSceneNode* camera;
video::IVideoDriver* driver;
scene::ISceneManager *sceneManager;
scene::IAnimatedMesh *room;
ISceneNode* q3node;
ISceneNode* q3node2;
irr::scene::IAnimatedMeshMD2* modele;
scene::ILightSceneNode* lumiere;
irr::SKeyMap keyMap[5];
};
#endif
demo.cpp #include "Demo.h"
#include "CEventReceiver.h"
#include "FollowingCamera.h"
#include <iostream>
using namespace irr;
using namespace std;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
Demo::Demo(bool f)
: fullscreen(f)
{
cam_thirdPerson = true; // Vue 1ère personne (false) | 3ème personne (true)
}
Demo::~Demo() { }
void Demo::initWorld()
{
//Device, driver et graphe de scene
device = irr::createDevice(video::EDT_OPENGL,
core::dimension2d<s32>(800,600),32,fullscreen,false,false);
driver = device->getVideoDriver ();
sceneManager = device->getSceneManager ();
//On rend invisible le curseur
device->getCursorControl ()-> setVisible (true);
ICursorControl* myCursor = device->getCursorControl();
device->getFileSystem()->addZipFileArchive("map-20kdm2.pk3");
room = sceneManager->getMesh("20kdm2.bsp");
if(cam_thirdPerson) {
// COLLISION CAMERA
q3node = 0;
if (room)
q3node = sceneManager->addOctTreeSceneNode(room->getMesh(0));
selector = 0;
if (q3node)
{
q3node->setPosition(vector3df(-1370,-130,-1400));
selector = sceneManager->createOctTreeTriangleSelector(room->getMesh(0), q3node, 128);
q3node->setTriangleSelector(selector);
selector->drop();
}
}
if (room == 0)
{
std::cout << "--> Probleme de chargement de la salle" << std::endl;
}
}
void Demo::startGame() {
CEventReceiver receiver(Nmodele);
device->setEventReceiver(&receiver);
while (device->run())
{
sceneManager->getActiveCamera();
driver->beginScene(true, true, video::SColor(0,200,200,200));
if(cam_thirdPerson) {
if(MaCamera) {MaCamera->Update();}
receiver.majPosMesh(*MaCamera->getCam(), true);
} else {
receiver.majPosMesh(*camera);
Nmodele->setRotation(vector3df(0,(camera->getRotation().Y - 90),0)); // Ne bouge que de gauche à droite le perso
}
sceneManager->drawAll ();
driver->endScene ();
}
device->drop ();
}
void Demo::initPerso() {
//Sydney
modele = (irr::scene::IAnimatedMeshMD2*)sceneManager->getMesh("sydney.md2");
Nmodele = sceneManager->addAnimatedMeshSceneNode(modele);
if(Nmodele) {
//On modifie les proprietes de Sydney
Nmodele->setMaterialFlag(irr::video::EMF_LIGHTING, false);
Nmodele->setFrameLoop(0, 0);
Nmodele->setMaterialTexture( 0, driver->getTexture("sydney.bmp") );
Nmodele->setPosition(vector3df(0,0,0));
Nmodele->setRotation(vector3df(0,0,0)); // dos a la camera
}
// COLLISION PERSONNAGE
q3node2 = 0;
if (room)
q3node2 = sceneManager->addOctTreeSceneNode(room->getMesh(0));
selector2 = 0;
if (q3node2)
{
q3node2->setPosition(vector3df(-1370,-130,-1400));
selector2 = sceneManager->createOctTreeTriangleSelector(room->getMesh(0), q3node2, 128);
q3node2->setTriangleSelector(selector2);
selector2->drop();
}
ISceneNodeAnimator* CollisionCamera = sceneManager->createCollisionResponseAnimator(
selector2, Nmodele, core::vector3df(10,30,10),
vector3df(0,0,0),
vector3df(0,0,0));
Nmodele->addAnimator(CollisionCamera);
CollisionCamera->drop();
}
void Demo::initCamera() {
//La camera
if(cam_thirdPerson) {
MaCamera = new FollowingCamera(Nmodele, sceneManager,
true, // Pour utiliser une position initiale.
selector, // Pour les collisions.
100, // Distance.
50, // Hauteur.
30, // Delta cible.
vector3df(-50,200,-120)); // Position initiale.
sceneManager->setActiveCamera( MaCamera->getCam() );
} else {
if(camera=sceneManager->addCameraSceneNodeFPS (0, 100.0f, 300.0f, -1, false, 5, false, 0.4)) {
cout << "--> Camera chargee" << endl;
//camera->setPosition(vector3df(0,20,-30));
//camera->setParent(Nmodele);
camera->setPosition(vector3df(0,0,0) + core::vector3df(0,25,0));
camera->setRotation(vector3df(0,90,0));
}
else
cout << "--> Erreur lors du chargement de la camera" << endl;
}
}
void Demo::initLumiere() {
/*
if(lumiere = sceneManager->addLightSceneNode(Nmodele, core::vector3df(150,210,250),video::SColorf(0.4f, 0.4f, 0.4f, 0.4f), 30.0f))
cout << "--> Lumiere ambiante ok" << endl;
else
cout << "--> Erreur lors du chargement de la lumiere ambiante" << endl;
*/
}
void Demo::changeView() {
cam_thirdPerson = true;
}
Comme vous pouvez le constater j'utilise la classe FollowingCamera (pour avoir la vue à la 3ème personne), mais c'est juste pour tester, elle ne sert strictement à rien

Pendant ces deux jours j'ai essayé tout et n'importe quoi et je suis à bout ...
Si quelqu'un pouvait me donner un indice, ça m'aiderait énormément.
Cordialement moi