0
버튼에 마우스 입력을 가져 오는 예제를 작성했습니다. 나는 사용자가 화면을 클릭 할 때 어떤 마우스 위치 x와 마우스 위치 Y를보고 싶다. 그러나 X와 Y는 항상 정크 값을 갖는다.irrlicht로 마우스 위치를 얻으려면 어떻게해야합니까?
https://i.stack.imgur.com/dQEMs.png
가 어떻게이 문제를 해결할 수 :
#include <irrlicht.h>
#include <iostream>
using namespace std;
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
// Declare a structure to hold some context for the event receiver so that it
// has it available inside its OnEvent() method.
struct SAppContext
{
IrrlichtDevice *device;
};
// Define some values that we'll use to identify individual GUI controls.
enum
{
GUI_ID_BUTTON = 101,
};
class MyEventReceiver : public IEventReceiver
{
public:
MyEventReceiver(SAppContext & context) : Context(context) { }
virtual bool OnEvent(const SEvent& event)
{
if (event.EventType == EET_GUI_EVENT)
{
s32 id = event.GUIEvent.Caller->getID();
switch(event.GUIEvent.EventType)
{
case EGET_BUTTON_CLICKED:
switch(id)
{
case GUI_ID_BUTTON:
cout << "X: "<< event.MouseInput.X << endl;
cout << "Y: "<< event.MouseInput.Y << endl << endl;
return true;
default:
return false;
}
break;
default:
break;
}
}
return false;
}
private:
SAppContext & Context;
};
int main(int argc, char** argv)
{
// create device and exit if creation failed
IrrlichtDevice * device = createDevice(video::EDT_SOFTWARE, core::dimension2d<u32>(1280, 720));
if (device == 0)
return 1; // could not create selected driver.
device->setWindowCaption(L"Irrlicht Engine - User Interface Demo");
device->setResizable(true);
video::IVideoDriver* driver = device->getVideoDriver();
IGUIEnvironment* env = device->getGUIEnvironment();
// add button
env->addButton(rect<s32>(0,0,640,360), 0, GUI_ID_BUTTON,
L"Button", L"Button");
// Store the appropriate data in a context structure.
SAppContext context;
context.device = device;
// Then create the event receiver, giving it that context structure.
MyEventReceiver receiver(context);
// And tell the device to use our custom event receiver.
device->setEventReceiver(&receiver);
/*
That's all, we only have to draw everything.
*/
while(device->run() && driver)
if (device->isWindowActive())
{
driver->beginScene(true, true, SColor(0,200,200,200));
env->drawAll();
driver->endScene();
}
device->drop();
return 0;
}
그리고 결과 이미지 : 이것은 내 코드? 마우스 입력 위치를 잡을 다른 방법이 있습니까?
대단히 감사합니다. –