Aktuelle Zeit: 01.11.2024, 00:54

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 19.09.2007, 10:27 
Offline
Newsposter
Benutzeravatar

Registriert: 12.03.2007, 10:42
Beiträge: 338
Wohnort: Berlin
Nach einer ganzen weile hab ich mich wieder dazu entschieden mich wieder Irrlicht zu widmen und nicht blos ab und zu mal reinzuschauen, also werd ich demnächst auch mal wieder eines der Offiziellen Tutorials für euch übersetzen.
aber nun zu meinem Problem:
Wenn ich die Klassen aus der Irrlicht demo übernehme und diese einfach nur abänderre funktionieren meine events, allerdings wollte ich da sganze ein wenig strukturierter haben und dachte mir ich pack mal den event receiver in eine extra Klasse. Das Problem an der sache ist aber wenn ich den KlassenPointer als event Klasse übergebe und das Programm Compiliere und starte kann ich keine Gui objekte benutzen (zB. kann Button nicht Klicken und TextBoxen nicht anklicken um Text Reinschreiben zu können)

vielleicht hab ich auch einfach nur ein Denkfehler in meinem code:
Code:
//main.cpp
#include "menu_gui.h"

#pragma comment(lib,"Irrlicht.lib")





int main()
{
   menuGui mainGui;
   mainGui.run();
   return 1;
}


Code:
//menugui.h
#include <iostream>
#include <Irrlicht.h>

using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;


class menuGuiER : public IEventReceiver
{
private:
   IrrlichtDevice *device;
public:
   menuGuiER(IrrlichtDevice *tmpdevice);
   virtual bool OnEvent(SEvent event);

};

class menuGui
{
private:
   IrrlichtDevice *device;
   IGUIEnvironment* env; // device->getGUIEnvironment()
   video::IVideoDriver* driver;
   menuGuiER *eventRC;
public:
   menuGui();
   ~menuGui();
   int initGui();
   int run();
};


Code:
//menugui.cpp
#include "menu_gui.h"


menuGuiER::menuGuiER(irr::IrrlichtDevice *tmpdevice)
{
   device=tmpdevice;
}

bool menuGuiER::OnEvent(SEvent event)
{
   if(event.EventType==EET_GUI_EVENT)
   {
      s32 id = event.GUIEvent.Caller->getID();
      if(event.GUIEvent.EventType==EGET_BUTTON_CLICKED)
      {
         if(id==101)
         {
            device->closeDevice();
            return true;
         }
      }
   }
   return true;
}


menuGui::menuGui()
{
   device = createDevice(video::EDT_SOFTWARE, core::dimension2d<s32>(640, 480));
   driver = device->getVideoDriver();
   env = device->getGUIEnvironment();
   this->initGui();
   this->eventRC = new menuGuiER(device);
   device->setEventReceiver(eventRC);
}

/**initGui()
  *initialize and add all needed gui elements
**/
int menuGui::initGui()
{
   env->addButton(core::rect<s32>(12,12,60,30),0,101,L"Exit");
   return 1;
}

int menuGui::run()
{
   while(device->run() && driver)
      if (device->isWindowActive())
      {
         driver->beginScene(true, true, SColor(0,122,65,171));
         env->drawAll();
         driver->endScene();
      }
   return 1;
}

menuGui::~menuGui()
{
   delete this->eventRC;
   device->drop();
}


ps.: hab es hier gepostet weil ich der meinung bin das es nicht an dem irrlicht code oder so liegt sondern an meiner art und weise zu coden und wie ich es coden wollte (wen das verwirrt hat, ihr müsst nicht gleich fragen was ich damit meinte)


Zuletzt geändert von psyco001 am 19.09.2007, 15:05, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
BeitragVerfasst: 19.09.2007, 12:43 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
in der OnEvent methode:
der receiver muss false returnen, wenn du das event nicht verarbeitet hast, also in der letzten zeile das true durch false ersetzen.

Aber warum leitest du nicht einfach menuGUI vom EventReceiver ab?
Du kannst dann immernoch den Code struktieren, indem du den EventReceiver code in eine eigene Datei packst, zb menu_gui_eventreceiver.cpp

_________________
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: 19.09.2007, 12:48 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
ja also erstmal kann man beobachten, wenn man ein
Code:
std::cout << event.EventType << std::endl;

direkt an den anfang der funktion onEvent schreibt, dass nur maus events an den ER kommen..
gute frage wieso..
[EDIT]
haha sylence tipp war alles,--- wenn man true zurückgibt, denkt irrlicht, man hätte das mouse-event selbst verarbeitet, daher kein gui-event.. (toll..)

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
BeitragVerfasst: 19.09.2007, 13:46 
Offline
Newsposter
Benutzeravatar

Registriert: 12.03.2007, 10:42
Beiträge: 338
Wohnort: Berlin
habs jetz korrigiert aber dafür krieg ich jetz nen ganz bösen fehler wenn ich auf den button klick:
Zitat:
Unbehandelte Ausnahme bei 0x00414839 in irr_test.exe: 0xC00000FD: Stack overflow.

und im code zeigt er auf die erste geschweifte klammer der onEvent funktion
könnte das vllt daran liegen das ich new und delete benutze

edit:
hab vergessen ne zeile wieder aus meim code raus zu nehmen die ich hier in meinem ertem post schon raus genommen hatte ^^


Nach oben
 Profil  
 
BeitragVerfasst: 19.09.2007, 15:05 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
ich schätze mal du benutzt die aktuelle SVN version?
dann muss es nämlich heißen

OnEvent(const SEvent &)

_________________
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: 19.09.2007, 15:06 
Offline
Newsposter
Benutzeravatar

Registriert: 12.03.2007, 10:42
Beiträge: 338
Wohnort: Berlin
nein ich bin leider meist zu doof etwas ausm SVN zu compilen
hab also irr 1.3.1 stable release

ps. hab den fehler schon gefunden
und danke für den hinweis (so weis ich wenigstens schonmal bescheid fals ich mir nen svn-build hole und nutze


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