Salut !
Encore une question tout bêtes mais a laquelle je n'arrive pas a trouver de solutions...
Dans l'objectif de faire un inventaire a mon jeu, j'aurais besoin de savoir comment bloquer la camera FPS (sans stopper le reste du rendue) et liberer le curseur du centre de l'ecran.
Ensuite, j'avais vus qu'il y avait possibilité d'accroché un billboard a la souris (voir tuto collision il me semble). Cependant, ce pointeur se projettait sur le mur (comme un pointeur laser).
Ya t'il moyen d'avoir un node "souri", just dans le plan afin de jeter le Petit curseur caca de windows et de mettre une image a la place.
Il me semble que sous Irrlicht, c'est chose était possible car je les avaient vus sur un jeu s'appelant DunjonTech
a+
w
Hors ligne
pour liberer la souris, c'est loin d'etre idiot,
pour faire ca, j'ai bricolé, voici ma solution :
comme creer deux cameras dans deux modes différents (une fps et l'autre pas fps) et switcher de l'une a l'autre (n'a pas marché), ou detruire la camera fps et creer une camera non fps (cf la demo irrlicht fournie en exemple), mais je ne sais pas pourquoi, j'ai rencontré de nombreux bugs en faisant cela, mais c'est que j'ai pris au final
(il est probable que, pressé par le temps, j'ai encore une fois codé a l'arrache, ce qui explique le plus souvent les bugs)
pour le billboard, suffit de rendre la souris invisible et d'afficher ton billboard a la position de la souris quelque part (ou tu veux en fait) dans la boucle d'affichage principale
Dernière modification par Jerry Kan (24-02-2007 19:11:19)
Hors ligne
Bon, pour le curseur, va falloir que je réfléchisse au principe (avec ce que tu as dit).
Pour le billboard, justement, pour l'attacher a la souris, il faut bien un "node" non ?
Sinon, pour la camera, il n'y a pas moyen de la gelée, en dérivent le "receiver" de la camera vers une position x,y qui position l'image/curseur sur l'ecran ?
Hors ligne
Willikus :
Pour le billboard, justement, pour l'attacher a la souris, il faut bien un "node" non ?
en fait j'ai dit une betise, c'est un peu la dech de faire la manip pour trouver les coordonnée 3d du billboard, a mon avis la bonne solution c'est de pas faire un billboard, je viens de regarder dans mon code, et je fait ce genre de truc :
// dans les initialisations : // on cache la souris device->getCursorControl()->setVisible(false); video::ITexture* image1 = driver->getTexture("data/bar2.bmp"); video::ITexture*pix= image1; .... // dans la boucle d'affichage : core::vector2df position; position = device->getCursorControl()->getPosition(); driver->draw2DImage(pix, position, core::rect<s32>(0,0,2,2), 0, video::SColor(255,255,255,255), true);
ce n'est donc pas un billboard mais un dessin 2d sur l'ecran, tres pratique pour faire les cadres et tableaux de bords (mini map, boutons, etc etc )
Dernière modification par Jerry Kan (25-02-2007 10:43:45)
Hors ligne
salut a tous,
pour ton probleme de curseur, j'ai fai le code suivant:
scene::IBillboardSceneNode * bill = smgr->addBillboardSceneNode(camera,core::dimension2d<f32>(20, 20));//j'ai attaché mon billboard directement a la camera en specifiant le parent "camera" au billboard bill->setPosition(core::vector3df(0, 0, 25));//la position du viseur reglable a l'infini bill->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR ); bill->setMaterialTexture(0, driver->getTexture( "media/particle.bmp"));// ton image (moi, c'est un viseur) bill->setMaterialFlag(video::EMF_LIGHTING, false); bill->setSize(core::dimension2d<f32>(3.0f, 3.0f));
et ca donne ca:
Dernière modification par cryo25 (26-02-2007 15:20:07)
Hors ligne
Bonjour à tous
Pour ton probleme de camera je me le suis poser il y a moin d'une semaine et j'ai réussi simplement en creant 2 camera : une FPS, une normal (comme disait jerry kan),tu mets la FPS par default et ensuite il te suffit quand tu veut afficher ton inventaire de mettre la position, la rotation, le target de la camera normal egale a ceux de la cam FPS et de changer de camera par default.
Ensuite tu remets en FPS pour revenir au jeu , chez moi sa marche nickel (version 1.2 d'irrlicht).
Voila si tu veut je te ferait un exemple.
dark calculator
Hors ligne
moi perso j'aimerai bien un exemple, je suis sur d'avoir mal fait un truc, mais je sais po quoi
Dernière modification par Jerry Kan (26-02-2007 23:04:10)
Hors ligne
D'accord pour toute ces reponse. Je pense que pour un beau curseur, se sera une image ^^.
Je veux bien un example (voir l'appli si tu as ^^")
Le curseur est bien liberer donc ? Ca m'a l'air parfait tous ça ^^
De plus, ce topic me conforte en me disant que je ne pose pas QUE des questions stupides
Hors ligne
rebonjour
Willikus :
Je veux bien un example (voir l'appli si tu as ^^") [/i]
l'appli est tellement mal codé et pas terminer que j'en ai ihonte donc je vais te passer que les bouts de codes qui t'intérèssent
bool clique; class MyEventReceiver : public IEventReceiver { public: virtual bool OnEvent(SEvent event) { if(event.EventType==EET_MOUSE_INPUT_EVENT) { if(event.MouseInput.Event==EMIE_LMOUSE_PRESSED_DOWN) { clique=true; } } return false; } }; int main() { MyEventReceiver event; device=createDevice(EDT_OPENGL,dimension2d<s32>(H, W),16,false,false,false,&event); ICameraSceneNode* scamera = smgr->addCameraSceneNode(); ICameraSceneNode* camera = smgr->addCameraSceneNodeFPS(); int a; (...) while (device->run()) { if (clique) { scamera->setPosition(camera->getPosition()); scamera->setRotation(camera->getRotation()); scamera->setTarget(camera->getTarget()); smgr->setActiveCamera(scamera); a=1; } if (conditionpourrefermer) && (a) { smgr->setActiveCamera(camera); } } }
Le test avec la variable a n'est surement pas obligatoire mais je ne sais plus pourquoi je l'est mis.
Sinon chez moi ca marche bien linux et windows a part dans certaint cas ou la camera FPS se mets à deriver je ne sais pas pourquoi mais sa le fait rarement.
bonsoir ou plutot bonne nuit
dark calculator
Hors ligne
Merci beaucoup pour ce code. Je l'aisserais quand j'aurais le temps; c'est vraiment sympa
Hors ligne
Salut !
Avec IrrlichtNETCP, pour que la camera ne suive plus ni la souris, ni le clavier, j'utilise la commance suivante :
camera.InputReceiverEnabled = false;
Ensuite, je rend le curseur visible.
Il faut savoir que si l'on remet a true, la camera s'axera sur la position du curseur de la souris, donc avant de remettre a true, il faut replacer la souris au centre de l'écran.
En c++, il faut chercher : SetInputReceiverEnabled.
J'espère avoir aidé.
Hors ligne
salut
Effectivement c'est beaucoup plus simple que toute mes magouilles.
Merci beaucoup
dark calculator
Hors ligne
Salut,
Moi j'utilise le code de dark calculator parce que l'autre plante.
Le seul bug que j'ai vu c'est que si on avance au moment où on clique la camera FPS continue à se déplacer.
Comment arreter une camera FPS?
Merci d'avance.
Gp2mv3
Hors ligne
Réponse super tardive:
Ma classe gérant les EventReceiver retourne FALSE pour justement pouvoir passer la main à la Camera FPS
en retourne TRUE, la main n'est plus donné à la camera FPS et celle-ci s'arrête et le curseur n'est plus fixé au centre de l’écran.
en retournant ensuite FALSE, la camera FPS remarche .
bien à vous
thoced
Hors ligne