#1 

11-12-2009 23:26:47

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

Bonjour tout de mêmesmile,
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 problemesbig_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


OptionsLiens officielsCaractéristiquesStatistiquesCommunauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1441 sujets
11339 messages
Dernier membre inscrit: Saidov17
81 invités en ligne
membre en ligne: -
RSS Feed