#0 

24-02-2007 15:56:01

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
Site web

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


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


#1 

24-02-2007 19:10:10

Jerry Kan
Habitué
Date d'inscription: 21-11-2006
Messages: 265

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


#2 

24-02-2007 19:53:32

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
Site web

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 ?


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


#3 

25-02-2007 10:25:33

Jerry Kan
Habitué
Date d'inscription: 21-11-2006
Messages: 265

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 :

Code:

// 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


#4 

26-02-2007 15:11:18

cryo25
Petit nouveau
Date d'inscription: 26-02-2007
Messages: 5

salut a tous,

pour ton probleme de curseur, j'ai fai le code suivant:

Code:

 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


#5 

26-02-2007 15:58:41

dark calculator
Abonné
Date d'inscription: 25-02-2007
Messages: 153

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


#6 

26-02-2007 19:26:18

Jerry Kan
Habitué
Date d'inscription: 21-11-2006
Messages: 265

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


#7 

26-02-2007 20:02:27

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
Site web

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 smile


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


#8 

26-02-2007 23:20:49

dark calculator
Abonné
Date d'inscription: 25-02-2007
Messages: 153

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

Code:

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


#9 

27-02-2007 19:36:21

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
Site web

Merci beaucoup pour ce code. Je l'aisserais quand j'aurais le temps; c'est vraiment sympa smile


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


#10 

28-02-2007 15:13:10

diOxy
Abonné
Date d'inscription: 10-10-2006
Messages: 153

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


#11 

28-02-2007 20:02:21

dark calculator
Abonné
Date d'inscription: 25-02-2007
Messages: 153

salut

Effectivement c'est beaucoup plus simple que toute mes magouilles.

Merci beaucoup

dark calculator

Hors ligne


#12 

27-06-2007 12:06:29

gp2mv3
Abonné
Date d'inscription: 27-06-2007
Messages: 103
Site web

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


Mon projet sous Irrlicht : RoM : Rebuilding on Mars
N'hésitez pas à y faire un tour wink

Hors ligne


#13 

20-10-2011 21:36:56

thoced
Membre
Date d'inscription: 02-08-2010
Messages: 65

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


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
86 invités en ligne
Aucun membre connecté
RSS Feed