eventReceiver in Irrlicht triggert mouseButtonUp nicht wenn over Gui?



  • Hallo ich habe ein Problem undzwar arbeite ich mich gerade in c++ und Irrlicht rein, dabei habe ich eine Kamerasteuerung die bei gedrückter linker Maustaste die Mausbewegung in Rotation und Position der Kamera umwandelt, dies klappt auch soweit.

    Nun habe ich ein GuiElement (Window) eingefügt, komme ich nun über dieses GuiElement bei gedrückter maustaste wird der Event des Mouse Up nicht weitergeleitet, lediglich ein MouseMove kommt an selbst wenn ich nur die MausTaste loslasse ohne das sich die Mauszeigerposition verändert wird der MausEvent das die Linke Maustaste gedrückt oder Released wird nicht weiter geleitet.

    Kann mir da evtl jemand einen Tipp geben wie ich den Event ggf. direkt aus dem system auslesen oder weiss jemand evtl. einen anderen Weg?

    mfg



  • Diese Problematik hatte ich ebenfalls in der 2D-Grafikbibliothek "SDL". Zwar kenne ich mich mit Irrlicht nicht aus, aber vielleicht gibt es dort eine Funktion wie in SDL, die Informationen über den Status von Maus und Tastatur zurückgibt - zumindest muss man in SDL dafür keine Events nutzen.



  • Jau danke das hilft.

    Für alle die mal durch Googlen auf das selbe Problem stossen:

    irr::SEvent::SMouseInput.isLeftPressed()
    

    Im eventReceiver sieht das dann ungefähr so aus:

    //!... code
          switch(event.MouseInput.Event)
          {
    //!... andere events
             case EMIE_MOUSE_MOVED:
                {
                    if (event.MouseInput.isLeftPressed())
                        {
                            MouseKeys[0] = true;
                        }
                        else
                        {
                            MouseKeys[0] = false;
                        }
                   IVideoDriver* driver = SceneManager->getVideoDriver();
                   if (driver)
                   {
                      MousePos.X = event.MouseInput.X / (f32)ssize.Width;
                      MousePos.Y = event.MouseInput.Y / (f32)ssize.Height;
                   }
                }
                break;
    //!... andere events & default... & weiterer code...
    

    erfordert natürlich das mouseMove auch getriggert wird(was hier zumindest der Fall ist).

    Danke nochmals. 🙂

    mfg


Anmelden zum Antworten