Aktuelle Zeit: 29.04.2024, 11:40

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 31.05.2007, 14:15 
Offline
Benutzeravatar

Registriert: 31.05.2007, 12:55
Beiträge: 5
Hiho!
Ich habe ein Problem: In einer 3D-Umg. möchte ich durch Kollision mit Objekten && Maus-Klicks spezifische Kontext-Menüs im guienv anzeigen. Irrlicht will nicht - das ganze sieht so aus:

#bla
void context()
class IEventreciever(OnEvent...)
Irrlicht init Kram
* device->
* guienv->
IEventReciever anhängen
Mesh,und .3ds laden
Hauptschleife
{
draw.All (device && guienv)
Kollisionsroutine
}

Vom IEventReciever wird eine Funktion aufgerufen, die dann das KontextMenü anzeigen soll. Genau dann schmeißt er mich raus. Bis zum EventReceiver schafft ers - beim KontextMenü bauen hakt es...

Habt ihr ein Tipp?

_________________
Leute die denken, die Dinge seien wirklich sind dumm wie Kühe. Leute die denken die Dinge sind nicht wirklich sind noch viel dümmer!


Nach oben
 Profil  
 
BeitragVerfasst: 31.05.2007, 15:35 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
ja.
poste deinen code, denn daran wirds liegen ;)


Nach oben
 Profil  
 
BeitragVerfasst: 31.05.2007, 17:32 
Offline
Benutzeravatar

Registriert: 31.05.2007, 12:55
Beiträge: 5
Oki
Hier komt die Anweisungen für das Kontext-Menü - wie gesagt, bis hierhin läuft alles glatt. (Der IEventReciever funzt und ruft dann die Funktion auf)

Code:
void contextmenu()
{
  device->getCursorControl()->setVisible(true); 
  core::rect<s32> r(0,0,50,50);
  gui::IGUIContextMenu* menu = device->getGUIEnvironment()->addContextMenu(r, 0, 45);
  menu->addItem(L"look", 46,true,false);
  menu->addItem(L"use", 47,true,false);
  menu->addSeparator();
  menu->addItem(L"Cancel", 48, true,false);   
}


Thx!

_________________
Leute die denken, die Dinge seien wirklich sind dumm wie Kühe. Leute die denken die Dinge sind nicht wirklich sind noch viel dümmer!


Nach oben
 Profil  
 
BeitragVerfasst: 31.05.2007, 18:38 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Ich sehe jetzt grad nicht, wo da ein Fehler liegt, aber lass dein Programm doch mal durch den Debugger laufen, dann siehst du, in welcher Zeile das genau abstürzt...

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
BeitragVerfasst: 01.06.2007, 00:33 
Offline
Benutzeravatar

Registriert: 31.05.2007, 12:55
Beiträge: 5
er schmiert genau in Zeile drei der Funk. ab. Eine Zugriffsverletzung (Segmentation Fault) trat auf...
Mhh - meine Idee war, dass Irr keine ContextMenus in 3D (ich steuer das device an) anzeigen will. Aber auch wenn ich die guiEnv ansteuere (ein Bild läd er ohne Probl) machte er das nicht und chrashed... Der gleiche Fehler: Segmentation Fault.

LG

_________________
Leute die denken, die Dinge seien wirklich sind dumm wie Kühe. Leute die denken die Dinge sind nicht wirklich sind noch viel dümmer!


Nach oben
 Profil  
 
BeitragVerfasst: 01.06.2007, 09:00 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
so einen fehler hatte ich auch mal..
das war ein segfault in drop() von IUnknown.. das --ReferenceCounter hat den fehler ausgelöst. ich hab den betreffenden code rausgenommen und voila vorbei... hab aber keine ahnung woran es lag.. segfault ist meistens wenn der speicher ungültig ist, dh entweder ist der zeiger veraltet oder der speicher wurde nicht gescheit alloziert.(reserviert)


Nach oben
 Profil  
 
BeitragVerfasst: 14.06.2007, 04:10 
Offline
Benutzeravatar

Registriert: 31.05.2007, 12:55
Beiträge: 5
Hallo!
Ich hab jetzt das Kontext-Menü soweit zum laufen gebracht, dass es zwar angezeigt wird, jedoch kann man dort kein Element ansteuern (es wird nicht hervorgehoben - es reagiert nicht). :(
Das ganze Programm basiert auf der Irrlicht Demo - zum lernen versuche ich es an meine Vorstellungen anzupassen - ein KM gehört leider absolut dazu... :lol:
Naja hier der (geklaute) Code:

Code:
bool CDemo::OnEvent(SEvent event)
{
     
    if (!device)
      return false;

    if (event.EventType == EET_KEY_INPUT_EVENT &&
      event.KeyInput.Key == KEY_ESCAPE &&
      event.KeyInput.PressedDown == false)
    {
      // user wants to quit.
      if (currentScene < 3)
         timeForThisScene = 0;
      else
         device->closeDevice();
     }
     else
     if ((event.EventType == EET_KEY_INPUT_EVENT &&
      event.KeyInput.Key == KEY_SPACE &&
      event.KeyInput.PressedDown == false) &&
      currentScene == 3)
    {
      // shoot
      shoot();
      }
    else
    if((event.EventType == EET_MOUSE_INPUT_EVENT &&
      event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP) &&
      currentScene == 3)
      {
                     
        }
     else
    if ((event.EventType == EET_MOUSE_INPUT_EVENT &&
      event.MouseInput.Event == EMIE_RMOUSE_LEFT_UP) &&
      currentScene == 3)
       {
          //Kontext-Menü fade in
         
          core::rect<s32> r(320, 240, 0, 0);
          gui::IGUIContextMenu* cmnu = device->getGUIEnvironment()->addContextMenu(r, 0, 100);
          cmnu->addItem(L"Schauen",101);
          cmnu->addItem(L"Benutzen",102);
          cmnu->addItem(L"Nehmen",103);
          cmnu->addItem(L"Sprechen",104);
          cmnu->addSeparator();
          cmnu->addItem(L"Abbrechen",105);
          device->getSceneManager()->getActiveCamera()->setInputReceiverEnabled(false);
          device->getCursorControl()->setVisible(true);
         
       }
    else
   if (event.EventType == EET_GUI_EVENT)
    {
      s32 id = event.GUIEvent.Caller->getID();
      switch(id)
      {
      case 100: // context menu
         if (event.GUIEvent.EventType == gui::EGET_MENU_ITEM_SELECTED)
         {
               s32 s = ((gui::IGUIContextMenu*)event.GUIEvent.Caller)->getSelectedItem(); //->getID();
            if (s == 0||s == 1||s == 2||s == 3||s == 4)
            {
               
                    device->getSceneManager()->getActiveCamera()->setInputReceiverEnabled(true);
                    device->getCursorControl()->setVisible(false);
            }
            break;
         }
      default:
         break;
      }
   }

_________________
Leute die denken, die Dinge seien wirklich sind dumm wie Kühe. Leute die denken die Dinge sind nicht wirklich sind noch viel dümmer!


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

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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