トップページ -> 実践知識 -> ゲームエンジン IRRLICHT による画像とグラフィックス -> Irrlicht でキーボード・イベント,マウス・イベントを扱う
[サイトマップへ]  

Irrlicht でキーボード・イベント,マウス・イベントを扱う

サイト構成 連絡先,業績など 実践知識 データの扱い コンピュータ 教材 サポートページ

IRRLICHT は,C 言語ベースの有名な3次元エンジンです. IRRLICHT は,画像(カラー,モノクロ)の描画、2次元グラフィックス3次元グラフィックスイベント処理(マウス,キーボード等)の機能をもったゲームエンジンの決定版です. 文字の描画 (unicodeも可), 画像ファイル読み書きの機能もありますし,スライダやボタンなどのGUI部品もあるので,困ることはありません.

参考 Web ページ: http://lesson.ifdef.jp/index.html ・・・ Irrlicht プログラム集

参考Webページ: http://www.zgock-lab.net/irrlicht/tut01.htm

参考Webページ: http://irrlichtstg.ifdef.jp/

参考 Web ページ: http://www.realintegrity.net/~irr/index.php?FrontPage


前準備


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 座標値,マウスホイールの動き、マウスのクリックなどについての情報が表示されることが分かる