#1 

11-12-2009 23:26:47

Ma77hTheG33k
Membres
Date d'inscription:
Messages: 13
IP: 86.198.127.13
Courriel

Bonjour tout de même smile,
Aujourd'huin ayant fait l'arme de mon FPS futuriste, j'ai voulu faire un setParent a la camera, mais ca ne se voit pas.. Quand j'envoie un message sur la console, ca me met toujours les memes coordonées...
Voici mon bout de code

#include <IRR/irrlicht.h>
#include <IRR/irrKlang.h>
#include <iostream>
#include "Window.h"
#include "EventReceiver.h"

#define HAUTEUR_SOL -0.447954f

using namespace irr;
using namespace std;

Window::Window(){}
Window::Window(int x1, int y1, int color1, bool fullscreen1){
	//Initialisation
	x = x1;	
	y = y1;
	color = color1;
	fullscreen = fullscreen1;

	//Création de la fenetre et des managers
	device = irr::createDevice(video::EDT_OPENGL, irr::core::dimension2d<u32>(600, 600) ,color,fullscreen,true,false,0);
	amgr = irr::audio::createIrrKlangDevice();
	driver = device->getVideoDriver();
	smgr = device->getSceneManager();
	cmgr = smgr->getSceneCollisionManager();
	emgr = new EntityManager(smgr, amgr);
	guienv = device->getGUIEnvironment();
	
	//La GUI
	initGUI();

	//La caméra
    irr::SKeyMap keyMap[5];
    keyMap[0].Action = irr::EKA_MOVE_FORWARD;
    keyMap[0].KeyCode = irr::KEY_KEY_Z;
    keyMap[1].Action = irr::EKA_MOVE_BACKWARD;
    keyMap[1].KeyCode = irr::KEY_KEY_S;
    keyMap[2].Action = irr::EKA_STRAFE_LEFT;
    keyMap[2].KeyCode = irr::KEY_KEY_Q;
    keyMap[3].Action = irr::EKA_STRAFE_RIGHT;
    keyMap[3].KeyCode = irr::KEY_KEY_D;
    keyMap[4].Action = irr::EKA_JUMP_UP;
    keyMap[4].KeyCode = irr::KEY_SPACE;

	camera = smgr->addCameraSceneNodeFPS(0,185.0f,0.001f,-1, keyMap, 5, true, 0.03256501f);
	camera->setFarValue(camera->getFarValue() + 20000.0f);
	camera->setNearValue(0.03f);
	camera->setPosition(irr::core::vector3df(-8.486232f, 0.22f, -5.292462f));
	camera->setTarget(irr::core::vector3df(-7.132532f, -0.294052f, -5.266525f));

	//Le labyrinthe
	mesh = smgr->getMesh("Labyrinthe(1_1).obj");
	couloir = smgr->addAnimatedMeshSceneNode(mesh);
	couloir->setMaterialFlag(irr::video::EMF_LIGHTING, false);
	couloir->setMaterialTexture(0, driver->getTexture("Labyrinthe(1_1)_cube.tga"));
	couloir->setScale(irr::core::vector3df(0.8f, 0.6f, 0.8f));

	//Une arme
	irr::scene::IAnimatedMeshSceneNode * mesDh = smgr->addAnimatedMeshSceneNode(smgr->getMesh("TMP.obj"));
	mesDh->setParent(camera);
	mesDh->setMaterialFlag(irr::video::EMF_LIGHTING, false);
	mesDh->setMaterialTexture(0, driver->getTexture("TMP_Pistolet.tga"));
	mesDh->setPosition(irr::core::vector3df(camera->getPosition().X, -0.300993f, camera->getPosition().Z));
	mesDh->setScale(irr::core::vector3df(0.01f, 0.01f, 0.01f));

	//Les caisses de Munitions
	entityMap[0] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-3.5444f, HAUTEUR_SOL, 2.2879f));
	entityMap[1] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-2.8300f, HAUTEUR_SOL, -5.8900f));
	entityMap[2] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-2.0500f, HAUTEUR_SOL, -1.8100f));
	entityMap[3] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-2.9100f, HAUTEUR_SOL, 0.4300f));
	entityMap[4] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-0.4100f, HAUTEUR_SOL, -0.8300f));
	entityMap[5] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-0.0700f, HAUTEUR_SOL, 2.0600f));

	//Collision
	selector = smgr->createOctTreeTriangleSelector(mesh->getMesh(0), couloir, 32);
    couloir->setTriangleSelector(selector);
	anim = smgr->createCollisionResponseAnimator(
	selector, camera, core::vector3df(0.0600f,0.3f,0.0600f),
	core::vector3df(0,-0.1f,0),
	core::vector3df(0,0.01f,0), 1);
	camera->addAnimator(anim);

	//Captage des Events
	EventReceiver receiver(driver, camera);
    device->setEventReceiver(&receiver);

	//Viseur
	device->getCursorControl()->setVisible(false);
	irr::video::ITexture * tmp = driver->getTexture("viseur_nozoom.png");
	scene::IBillboardSceneNode* viseur = 0;
	viseur = smgr->addBillboardSceneNode(0, core::dimension2d<f32>(0.1f,0.1f));
	viseur->setPosition(irr::core::vector3df(-8.298266f, 0.22f, -5.288859f));
	viseur->setMaterialType(irr::video::EMT_TRANSPARENT_ALPHA_CHANNEL);
	viseur->setMaterialFlag(video::EMF_LIGHTING, false);
	viseur->setMaterialFlag(video::EMF_ZBUFFER, false);
	viseur->setMaterialTexture(0, tmp);
	camera->addChild(viseur);

	vie = 100;
	rechargeMax = 1000;
	recharge = 1000;
	balles = 20;
	
	couché = false;

	while(device->run())
	{
		cout << "X : " << mesDh->getPosition().X << "Y : " << mesDh->getPosition().Y << "Z : " << mesDh->getPosition().Z << endl;

		//Camera
		bool cam = receiver.update(driver, camera);

		//Ciblage
		line = smgr->getSceneCollisionManager()->getRayFromScreenCoordinates( device->getCursorControl()->getPosition(), device->getSceneManager()->getActiveCamera());
	    selectedSceneNode = smgr->getSceneCollisionManager()->getSceneNodeFromRayBB(line);

		//Attaque
		if(recharge>=73){
			if(cam){
				if(balles >= 0){amgr->play3D("gunC.wav", camera->getPosition());
				printf("\
Reste %ld balles", balles);
				}

				if(balles <= 0){
					amgr->play3D("empty.wav", camera->getPosition());
				}
					
				/*if(selectedSceneNode == win && selectedSceneNode != couloir && cam && balles >= 0){
					VieWin -= 25;
					printf("\
VieWin : %ld", VieWin);
				}
				
				if(VieWin == 0){
					amgr->play3D("mort.wav", win->getPosition());
					VieWin--;
				}

				*/
				
				if(selectedSceneNode == couloir && cam && balles >= 0){
					irr::core::vector3df impact;
					irr::core::triangle3df triangleImpact;
					const irr::scene::ISceneNode * nodeImpact;
					cmgr->getCollisionPoint(line, selector, impact, triangleImpact, nodeImpact);
					amgr->play3D("metal.wav", impact);
				}

				if(balles >= 0){balles--;}
				
				recharge = 0;
				cam = false;
			}
		}			
		recharge++;

		//Titre
		core::vector3df posCam = camera->getPosition();
		wchar_t titre[1000];
		swprintf(titre, 1000, L"X : %f Y : %f Z : %f", posCam.X, posCam.Y, posCam.Z);
		device->setWindowCaption(titre);
		
		//Munitions
		balles += emgr->updateMunitionsBox(entityMap[0], camera, balles);
		balles += emgr->updateMunitionsBox(entityMap[1], camera, balles);
		balles += emgr->updateMunitionsBox(entityMap[2], camera, balles);
		balles += emgr->updateMunitionsBox(entityMap[3], camera, balles);
		balles += emgr->updateMunitionsBox(entityMap[4], camera, balles);
		balles += emgr->updateMunitionsBox(entityMap[5], camera, balles);
		if(balles >= 100){balles = 100;}
		swprintf(ballesTxt, 1000, L"%ld Balles", balles);

		//Dessin des meshs 3D
		driver->beginScene(true, true, video::SColor(255,0,0,0));
		smgr->drawAll();
		guienv->drawAll();
		amgr->setListenerPosition(camera->getPosition(), camera->getTarget());
		driver->endScene();
	}
	guienv->drawAll();
	device->drop();
	exit(0);

}

void Window::initGUI(){

}

Window::~Window(){
	delete device;
	delete driver;
	delete smgr;
	delete selectedSceneNode;
	delete guienv;
	delete skin;
	delete camera;
	delete couloir;
	delete emgr;
	delete mesh;
	delete anim;
	delete selector;
}

Merci pour votre aide !!
Ma77hTheG33k


Hors ligne


#2 

12-12-2009 10:03:01

firnafin
Membres
Avatar de firnafin
Date d'inscription:
Messages: 150
IP: 93.9.158.138
Courriel

Voici un petit jeux : trouver l'erreur :

La doc :

setPosition (const core::vector3df &newpos)
Sets the position of the node relative to its parent.


ton code :

mesDh->setParent(camera);
...
mesDh->setPosition(irr::core::vector3df(camera->getPosition().X, -0.300993f, camera->getPosition().Z));


Hors ligne


#3 

12-12-2009 10:58:26

Ma77hTheG33k
Membres
Date d'inscription:
Messages: 13
IP: 86.198.127.13
Courriel

Je vois pas trop le problème...

EDIT : Ah, j'ai trouvé....


Hors ligne


#4 

12-12-2009 13:30:03

firnafin
Membres
Avatar de firnafin
Date d'inscription:
Messages: 150
IP: 93.9.158.138
Courriel

c'est toujour plus constructif de trouver par soi-meme les solutions aux problemes big_smile


Hors ligne


#5 

28-12-2009 13:23:06

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 79.85.248.174
Courriel

Alors peut tu m'ésplique où est ton erreur car j'ai le même souci ! Merci d'avance !


Hors ligne


#6 

31-12-2009 09:28:13

nabouill
Membres
Avatar de nabouill
Date d'inscription:
Messages: 242
IP: 93.13.111.104
Courriel

jonath313 Ecris:

Alors peut tu m'ésplique où est ton erreur car j'ai le même souci

je pense que le problème venait de:

Code c++ :

mesDh->setPosition(irr::core::vector3df(camera->getPosition().X, -0.300993f, camera->getPosition().Z));


Il ne faut pas faire un "camera->getPostion()". L'arme étant le fils de la camera. Un simple:

Code c++ :

mesDh->setPosition(irr::core::vector3df(0.0f, -0.300993f, 0.0f));


devrais suffire.

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
117 invités en ligne
membre en ligne: -
RSS Feed