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)