Irrlicht でキーボード・イベント,マウス・イベントを扱う
IRRLICHT は,C 言語ベースの3次元エンジンです. IRRLICHT は,画像(カラー,モノクロ)の描画、2次元グラフィックス、3次元グラフィックス,イベント処理(マウス,キーボード等)の機能をもったゲームエンジンの決定版です. 文字の描画 (unicodeも可), 画像ファイル読み書きの機能もありますし,スライダやボタンなどのGUI部品もあるので,困ることはありません.
【関連する外部ページ】: http://lesson.ifdef.jp/index.html ・・・ Irrlicht プログラム集
【関連する外部ページ】 http://www.zgock-lab.net/irrlicht/tut01.htm
【関連する外部ページ】 https://irrlichtstg.ifdef.jp/
【関連する外部ページ】 http://www.realintegrity.net/~irr/index.php?FrontPage
前準備
- Windows の場合
Irrlicht のインストールが終わっていること.
- Linux の場合
Irrlicht のインストールが終わっていること.
Irrlicht でキーボード・イベント,マウス・イベントを扱うプログラム例
Irrlicht を使ってウインドウを開くだけのプログラムです.ウインドウサイズ,背景色,タイトルなどは簡単に変更できる.
#ifdef WIN32
#include<windows.h>
#endif
#include<irrlicht.h>
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
#pragma comment(lib, "Irrlicht.lib")
class MyEventReceiver : public IEventReceiver
{
public:
virtual bool OnEvent(const irr::SEvent& e)
{
// mouse event
if (e.EventType == irr::EET_MOUSE_INPUT_EVENT) {
fprintf(stderr, "%d, %d, %lf, %d\n", e.MouseInput.X, e.MouseInput.Y, e.MouseInput.Wheel, e.MouseInput.ButtonStates );
switch(e.MouseInput.Event) {
case EMIE_MOUSE_MOVED: {
fprintf(stderr, "[Mouse] moved, %d, %d\n", e.MouseInput.X, e.MouseInput.Y);
break;
}
case EMIE_LMOUSE_PRESSED_DOWN: {
fprintf(stderr, "[Mouse] Left mouse button was pressed down\n");
break;
}
case EMIE_RMOUSE_PRESSED_DOWN: {
fprintf(stderr, "[Mouse] Right mouse button was pressed down\n");
break;
}
case EMIE_MMOUSE_PRESSED_DOWN: {
fprintf(stderr, "[Mouse] Middle mouse button was pressed down\n");
break;
}
case EMIE_LMOUSE_LEFT_UP: {
fprintf(stderr, "[Mouse] Left mouse button was left up\n");
break;
}
case EMIE_RMOUSE_LEFT_UP: {
fprintf(stderr, "[Mouse] Right mouse button was left up\n");
break;
}
case EMIE_MMOUSE_LEFT_UP: {
fprintf(stderr, "[Mouse] Middle mouse button was left up\n");
break;
}
case EMIE_LMOUSE_DOUBLE_CLICK: {
fprintf(stderr, "[Mouse] Left mouse button double click\n");
break;
}
case EMIE_RMOUSE_DOUBLE_CLICK: {
fprintf(stderr, "[Mouse] Right mouse button double click\n");
break;
}
case EMIE_MMOUSE_DOUBLE_CLICK: {
fprintf(stderr, "[Mouse] Middle mouse button double click\n");
break;
}
case EMIE_MOUSE_WHEEL: {
fprintf(stderr, "[Mouse] mouse wheel was moved, %lf\n", e.MouseInput.Wheel);
break;
}
} /* switch */
} /* if */
// keyboard event
if (e.EventType == irr::EET_KEY_INPUT_EVENT) {
fprintf(stderr, "%d, %d, %d, %d, %d\n", e.KeyInput.Char, e.KeyInput.Key, e.KeyInput.PressedDown, e.KeyInput.Shift, e.KeyInput.Control);
if (e.KeyInput.PressedDown){
fprintf(stderr, "[Keyboard] press down, %d\n", e.KeyInput.Key);
} else {
fprintf(stderr, "[Keyboard] up, %d\n", e.KeyInput.Key);
}
return true;
}
return false;
}
};
#ifdef WIN32
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
#else
int main()
#endif
{
const int width = 640;
const int height = 480;
//
MyEventReceiver receiver;
// start up an engine
video::E_DRIVER_TYPE driverType;
#ifdef WIN32
driverType = video::EDT_DIRECT3D9;
#else
/* driverType = video::EDT_OPENGL; */
driverType = video::EDT_SOFTWARE;
/* driverType = video::EDT_SOFTWARE2; */
#endif
static IrrlichtDevice *device = createDevice( driverType,
/* windowSize */ core::dimension2d<u32>(width, height),
/* bits */ 16,
/* fullscreen */ false,
/* stencilbuffer */ false,
/* vsync */ false,
/* IEventReceiver */ &receiver
);
if (device == 0)
return 1;
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* scenemgr = device->getSceneManager();
gui::IGUIEnvironment* guienv = device->getGUIEnvironment();
gui::IGUIFont* font = guienv->getBuiltInFont();
device->setWindowCaption(L"simple test");
// draw everything
while(device->run() && driver) {
driver->beginScene(true, true, video::SColor(255,0,0,255));
/* scenemgr->drawAll(); */
driver->endScene();
}
// delete device
device->drop();
return 0;
}
Ubuntu でのコンパイル操作の手順例
g++ -I/usr/include/irrlicht hoge.cc -lIrrlicht
キーボード のキーコード, マウスの X,Y 座標値,マウスホイールの動き、マウスのクリックなどについての情報が表示されることが分かる
