Aktuelle Zeit: 23.12.2024, 14:57

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Irrlicht-Events funktionieren nicht?
BeitragVerfasst: 10.07.2008, 20:31 
Offline
Benutzeravatar

Registriert: 21.06.2008, 20:00
Beiträge: 8
Folgendes Problem:
Ich habe Irrlicht in ner Windows-Form initialisiert, in nem separatem Thread. Das OnEvent-event wurde korrekt mit
Code:
device.OnEvent += new OnEventDelegate(device_OnEvent);
initialisiert. Jetzt wollte ich abfragen, ob die linke Maustaste gedrückt wurde.
Code:
bool device_OnEvent(Event ev)
        {
            if (ev.Type == EventType.MouseInputEvent)
            {
                if (ev.MouseInputEvent == MouseInputEvent.LMousePressedDown)
                {
                    // Mach was
                    return true;
                }
            }
            return false;
        }
Blöderweise kommt er nie dort an. Nach mehrfachem testen habe ich herausgefunden, dass selbst ein breakpoint vor dem ersten if nur zwei mal anhält: Einmal beim initialisieren der Engine, und einmal beim beenden. Sonst wird das Event offenbar gar nicht aufgerufen. Leider habe ich nicht die geringste Idee, woran das liegen könnte... Weiß jemand von euch bescheid? ;)

Edit:Habe mich vertan, nicht beim initialisieren der Engine, sondern beim laden von Texturen und dergleichen wird das Event gefeuert.

Edit:Idee: Kann es daran liegen, dass die Engine in nem Panel initialisiert ist, und das eventuell nciht als "aktiv" angesehen wird?

Drag-On


Nach oben
 Profil  
 
BeitragVerfasst: 10.07.2008, 20:45 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Wenn das ding in nem Panel ist, funktioniert doch alles einwandfrei.
Da du das Fenster erstellst hast bist du auch für die verarbeitung der Events zuständig.

Irrlicht verarbeitet die Events nur, wenn es selber das Renderfenster erstellt hat.

Du musst dich also selber darum kümmern zu prüfen, ob eine Maustaste oder Tastaturtaste gedrückt wurde.

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
BeitragVerfasst: 10.07.2008, 21:01 
Offline
Benutzeravatar

Registriert: 21.06.2008, 20:00
Beiträge: 8
Das Problem ist dann aber, dass ich dann nicht die exakte Position der Maus im Irrlicht-Fenster herausfinden kann... Jedenfalls hab ich es bisher nicht hinbekommen, sagen wir mal so :)

Drag-On


Nach oben
 Profil  
 
BeitragVerfasst: 10.07.2008, 22:07 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Naja kenn mit mit .NET nicht aus, aber mit normaler WinAPI gehts, also wirds wohl auch mit .NET gehen.

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
BeitragVerfasst: 11.07.2008, 09:10 
Offline

Registriert: 27.03.2007, 16:53
Beiträge: 33
Wohnort: Chemnitz
hey,

mhh ich kann mir gerade nicht richtig vorstellen was du machst :D

Irrlicht hast du in einem seperaten Thread laufen mhhh?!
und in deinem WindowsForms hast du dann das IrrlichtEvent angezogen...
mhhh...eigentlich sollte es gehen...
Und wo du die Engine initialisierst ist egal.... hauptsache du kannst auf die initialisierte variable zugreifen.
Hast du das Event von Irrlicht einmal init. oder mehrere?
Code:
//init
device.OnEvent += new OnEventDelegate(device_OnEvent1);
device.OnEvent += new OnEventDelegate(device_OnEvent2);

//pseudo code
bool device_OnEvent1(Event ev)
{
   if (ev.Type == EventType.MouseInputEvent)
   {
      if (ev.MouseInputEvent == MouseInputEvent.LMousePressedDown)
      {
         // Mach was
         return true;
      }
   }
return false;
}
bool device_OnEvent2(Event ev)
{
   if (ev.Type == EventType.MouseInputEvent)
   {
      if (ev.MouseInputEvent == MouseInputEvent.LMousePressedDown)
      {
         // Mach was
         return true;
      }
   }
return false;
}


hilft das? hier(test source zum runterladen) und dort
könntest du mal den Source Uploaden? wenn ich es mir anschauen soll?

_________________
Develop On System:
-WindowsXP Prof.
-Microsoft .NET2005 | Framework2.0 (C#)
-using IrrlichtNetCP (.NET Wrapper for Irrlicht)

<<Because it makes FUN>>


Nach oben
 Profil  
 
BeitragVerfasst: 11.07.2008, 16:16 
Offline
Benutzeravatar

Registriert: 21.06.2008, 20:00
Beiträge: 8
Ich habs jetzt über das OnClick-Event des Panels hinbekommen. Man muss komischerweise die Position ein bisschen anpassen, und zwar muss man ein Position2D(3, 29) hinzuaddieren. Fragt mich nicht, woher diese Zahlen kommen...

@JDHunter: Danke für die Links, die Threads hatte ich aber beide schon gesehen. Danke auch für das Angebot, meinen Source anzuschauen, aber ich denke, da es jetzt ja läuft, müssen wir uns beide keinen Zusätzlichen Aufwand machen ;)

Drag-On


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de