13.マウス・キーボード
画像をマウスとキーボードを使って操作します。
最初は、マウスカーソル位置に画像が表示されているので、
マウスカーソルを動かしたり、カーソルキーで動かしてみましょう。
マウスホイールを回転させることで画像の拡大縮小も行っています。

変数用意
画像のスケール、画像の座標とマウスの座標をわかりやすいように
グローバル変数で設定しておきます。
float scale = 1.0f;
position2d pos(0,0);
position2d mouse;
|
キーイベント処理
イベントレシーバーを設定します。
マウスやキーボードのイベントを受け取ったら、ユーザーが自由に処理できるようにします。
イベントが発生すると、OnEventが呼び出されるので、その中に記述します。
まずは、キーボードの処理を行います。
イベントのタイプにキーボード(EET_KEY_INPUT_EVENT)を指定します。
カーソルキーが押されたら画像の位置を変更するようにしてあります。
class MyEventReceiver : public IEventReceiver
{
public:
virtual bool OnEvent(const SEvent& event)
{
if(event.EventType == EET_KEY_INPUT_EVENT)
{
if(event.KeyInput.PressedDown)
{
switch(event.KeyInput.Key)
{
case KEY_LEFT:
pos.X -= 5;
return true;
case KEY_RIGHT:
pos.X += 5;
return true;
case KEY_UP:
pos.Y -= 5;
return true;
case KEY_DOWN:
pos.Y += 5;
return true;
default:
return false;
}
}
return true;
}
|
マウスイベント処理
次にマウスの処理を行います。
イベントのタイプにマウス(EET_MOUSE_INPUT_EVENT)を指定します。
マウスの左ボタンが押された時に、画像の位置を元に戻します。
ホイールを上回転させた時に、画像のスケールを拡大させます。
ホイールを下回転させた時に、画像のスケールを縮小させます。
マウスが移動した時に、マウスの位置を変数に格納します。
if(event.EventType == EET_MOUSE_INPUT_EVENT)
{
switch(event.MouseInput.Event)
{
case EMIE_LMOUSE_PRESSED_DOWN:
pos.X = 0;
pos.Y = 0;
return true;
case EMIE_MOUSE_WHEEL:
//上回転
if(event.MouseInput.Wheel == 1)
{
if(scale < 10.0f)
scale += 0.2f;
}
//下回転
else if(event.MouseInput.Wheel == -1)
{
if(scale > 0.2f)
scale -= 0.2f;
}
return true;
case EMIE_MOUSE_MOVED:
mouse.X = event.MouseInput.X;
mouse.Y = event.MouseInput.Y;
return true;
default:
return true;
}
}
return false;
}
};
|
画像描画
draw2DImageを使用して画像を描画します。
画像の表示位置、サイズ、テクスチャの読み込み位置などを指定して描画します。
void makeScene(IVideoDriver *driver)
{
int x = mouse.X+pos.X;
int y = mouse.Y+pos.Y;
int w = 32;
int h = 32;
float u = 0;
float v = 0;
ITexture* texture = driver->getTexture("particle.png");
SColor colors[] = {0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF};//左上,左下,右下,右上
driver->draw2DImage(texture,
rect(x,y,x+w*scale,y+h*scale),
rect(u,v,u+w,v+h),
0, colors, true);
}
|

draw2DImage
2Dテクスチャを描画します。
void draw2DImage(
ITexture* texture,
const rect<s32>& destRect,
const rect<s32>& sourceRect,
const rect<s32>* clipRect = 0,
SColor* colors = 0,
bool useAlphaChannelOfTexture = false
)
|
texture 描画するテクスチャを指定します。
destRect 描画する場所(矩形)を指定します。
sourceRect テクスチャから読み込む場所(矩形)を指定します。
clipRect 描画してよい場所(矩形)を指定します。
colors 頂点カラーを指定します。
useAlphaChannelOfTexture アルファチャネルを使用する場合はtrueに設定します。
|
レシーバーの設定
上で作成したレシーバークラスを定義します。
createDeviceに関連付けを行い、setEventReceiverでセットしておきます。
これにより、マウスやキーボードの処理はMyEventReceiverで処理されます。
MyEventReceiver Receiver;
IrrlichtDevice *device = createDevice(EDT_OPENGL,dimension2d(320,240),16,
false,false,false,&Receiver);
IVideoDriver *driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
device->setEventReceiver(&Receiver);
|
ダウンロード
今回作成したファイル一式です。
宿題
1.右クリックを押したら画像が変わるようにしましょう。
2.カーソルキーごとに、押したら画像が変わるようにしましょう。
3.カーソルキーで画像を動かす時に、画面外に出ないようにしましょう。
|
|