キー入力による操作

キー操作を取得するためにEasy3DではE3DGetKeyboardState命令が用意されています。
基本的にはgetkey命令と同じですが、複数のキーの状態を一度の呼び出しで取得できる点が 異なります。

サンプル

前回作成した地面をフライトシミュレータのように移動してながめるサンプルです。
操作はキーボードの矢印キーで向き変更、Zで前進、Xで後退します。
作成した地形を確認してみてください。
実行に必要なファイル:e3d006.zip

前回のサンプルに追加した部分を赤色で表示してあります。


;
;	キー操作でカメラを移動する
;

#include "e3dhsp.as"

	;/////////////////
	;	初期化
	;
	E3DInit
	dim keybuf, 256		;キー入力
	camdegxz = 135		;カメラ向き

	;/////////////////	
	;
	;	カメラの初期化
	;
	camposx = 0 : camposy = 2500 : camposz = 0
	E3DSetCameraPos camposx, camposy, camposz	;カメラ座標を設定
	targetx = 10		;注視点座標
	targety = camposy
	targetz = 10
	upvecx = 0		;カメラの上方向のベクトル
	upvecy = 1
	upvecz = 0
	E3DSetCameraTarget targetx, targety, targetz, upvecx, upvecy, upvecz	;カメラの注視点を設定
	E3DSetProjection 100, 50000


	;/////////////////	
	;
	;	ライトの設定
	;
	E3DCreateLight lid1		;光源を作成
	lightdirx1 = 1		;平行光の向き
	lightdiry1 = -1
	lightdirz1 = 0
	lightr1 = 255	;平行光の色
	lightg1 = 255
	lightb1 = 255
	E3DSetDirectionalLight lid1, lightdirx1, lightdiry1, lightdirz1, lightr1, lightg1, lightb1	;光源を平行光源に設定


	;/////////////////	
	;
	;	地面の作成
	;
	sdim pathbuf, 2048, 4
	pathbuf.0 = curdir + "\\yama.bmp"	;地面の座標情報
	pathbuf.1 = curdir + "\\michi.bmp"	;地面の道の情報
	pathbuf.2 = curdir + "\\kawa.bmp"	;地面の川の情報
	pathbuf.3 = curdir + "\\bazou.bmp"	;地面、道、川の模様を決める、BMPファイル

	;地面作成用の値
	mapsize = 60000		;X,Z座標の最大値
	mapdiv = 60			;座標の分割数
	mapheight = 3000	;高さの最大値

	E3DLoadGroundBMP pathbuf.0, pathbuf.1, pathbuf.2, pathbuf.3, mapsize, mapsize, mapdiv, mapdiv, mapheight, hsid0
;	posx0 = 0 : posy0 = 0 : posz0 = 0
;	degx0 = 0 : degy0 = 0 : degz0 = 0
;	E3DSetPos hsid0, posx0, posy0, posz0	地面表示位置を設定
;	E3DSetDir hsid0, degx0, degy0, degz0	地面の向きを設定
	frameno0 = 0	;モーションは使用しない。


;/////////////////
;	メインループ
;
*main

	E3DGetKeyboardState keybuf	;キー状態取得

	E3DChkInView hsid0	;モデルが、視野内にあるか判定
	E3DBeginScene	;-----シーンスタート
		;バックバッファへの書き込み作業を行う

		if keybuf.VK_ESCAPE = 1 : goto *bye ; [ESC]で終了

		gosub *MoveCamera		;カメラ移動

		E3DRender hsid0, 0, frameno0, 0	;バックバッファにレンダリングする。(地面描画)

	E3DEndScene		;-----シーン終了
	E3DPresent		;バックバッファの内容を、プライマリバッファに転送。描画する。
	E3DWaitbyFPS 60 : await 0
goto *main


;/////////////////
;	終了処理
;
*bye
	E3DDestroyLight lid1	;ライトを破棄
	E3DBye
	end


;/////////////////
;	カメラ移動
;
*MoveCamera
	if keybuf.VK_UP = 1	: camdegy--	;矢印上
	if keybuf.VK_DOWN = 1	: camdegy++	;矢印下
	if keybuf.VK_LEFT = 1	: camdegxz++	;矢印左
	if keybuf.VK_RIGHT = 1	: camdegxz--	;矢印右
	if keybuf.'Z' = 1	: camstep=100	;z	前進
	if keybuf.'X' = 1	: camstep=-100	;x	後退

	E3DCameraPosForward camstep		;カメラの向いている方向に移動
	E3DSetCameraDeg camdegxz,camdegy	;カメラの向きを変更
	camstep=0
	return





バーチャルキー情報

VK_UPやVK_DOWNなどはE3DGetKeyboardState命令で使いやすいように定数として登録されています。
ここではこのバーチャルキー情報をあらわすための定数を書き出してみました。
マニュアルでは e3dhsp_vk.asに記載となっていますが、実際は e3dhsp.asに記載されています。
内容はWindowsの、WinUser.h と同様のものらしいのですが、 WinUser.hの内容がよく分からないので実際にキーボードを使いながら確かめてみました。


定数 キー操作 キー操作
VK_LBUTTON マウス 左クリック
VK_RBUTTON マウス 右クリック
VK_CANCEL ホイールクリック
VK_MBUTTON
VK_BACK Back Space
VK_TAB Tabキー
VK_CLEAR
VK_RETURN Enter
VK_SHIFT Shift
VK_CONTROL Ctrl
VK_MENU Alt
VK_PAUSE Pause Ctrl + NumLock
VK_CAPITAL Shift + CapsLock
VK_KANA KANA
VK_HANGEUL HANGEUL
VK_HANGUL HANGUL
VK_JUNJA
VK_FINAL
VK_HANJA Alt + 半角/全角(漢字)
VK_KANJI Alt + 半角/全角(漢字)
VK_ESCAPE Esc
CONVERT 前候補、変換(次候補)
NONCONVERT 無変換
ACCEPT
MODECHANGE
VK_SPACE スペースキー
VK_PRIOR PageUp
VK_NEXT PageDown
VK_END End Shift + テンキー1
VK_HOME Home Shift + テンキー7
VK_LEFT 左矢印キー Shift + テンキー4
VK_UP 上矢印キー Shift + テンキー8
VK_RIGHT 右矢印キー Shift + テンキー6
VK_DOWN 下矢印キー Shift + テンキー2
VK_SELECT
VK_PRINT
VK_EXECUTE
VK_SNAPSHOT PrintScreen
VK_INSERT Insert Shift + テンキー0
VK_DELETE Delete Shift + テンキー.
VK_HELP
'0' 0
... ...
'9' 9
'A' A
... ...
'Z' Z
VK_LWIN ウィンドウズキー(左)
VK_RWIN ウィンドウズキー(右)
VK_APPS Applicationキー (右クリックと同等機能のキーのことです。)
VK_SLEEP
VK_NUMPAD0 テンキーの0
VK_NUMPAD1 テンキーの1
VK_NUMPAD2 テンキーの2
VK_NUMPAD3 テンキーの3
VK_NUMPAD4 テンキーの4
VK_NUMPAD5 テンキーの5
VK_NUMPAD6 テンキーの6
VK_NUMPAD7 テンキーの7
VK_NUMPAD8 テンキーの8
VK_NUMPAD9 テンキーの9
VK_MULTIPLY テンキーの *
VK_ADD テンキーの +
VK_SEPARATOR
VK_SUBTRACT テンキーの -
VK_DECIMAL テンキーの .
VK_DIVIDE テンキーの /
VK_F1 F1
VK_F2 F2
VK_F3 F3
VK_F4 F4
VK_F5 F5
VK_F6 F6
VK_F7 F7
VK_F8 F8
VK_F9 F9
VK_F10 F10
VK_F11 F11
VK_F12 F12
VK_F13
VK_F14
VK_F15
VK_F16
VK_F17
VK_F18
VK_F19
VK_F20
VK_F21
VK_F22
VK_F23
VK_F24
VK_NUMLOCK NumLock
VK_SCROLL ScrollLock


VK_L* & VK_R* - left and right Alt, Ctrl and Shift virtual keys.
Used only as parameters to GetAsyncKeyState() and GetKeyState().
No other API or message will distinguish left and right keys in this way.
定数 キー操作 キー操作
VK_LSHIFT Shift(左)
VK_RSHIFT Shift(右)
VK_LCONTROL Ctrl(左)
VK_RCONTROL Ctrl(右)
VK_LMENU Alt(左)
VK_RMENU Alt(右)
VK_OEM_1 ';:' for US :
VK_OEM_PLUS '+' any country ;
VK_OEM_COMMA ',' any country ,
VK_OEM_MINUS '-' any country -
VK_OEM_PERIOD '.' any country .
VK_OEM_2 '/?' for US /
VK_OEM_3 '`~' for US @
VK_OEM_4 '[{' for US [
VK_OEM_5 '\|' for US \ |
VK_OEM_6 ']}' for US ]
VK_OEM_7 ''"' for US ^
VK_OEM_8


Various extended or enhanced keyboards
定数 キー操作 キー操作
VK_OEM_AX 'AX' key on Japanese AX kbd
VK_OEM_102 "<>" or "\|" on RT 102-key kbd.
VK_ICO_HELP Help key on ICO
VK_ICO_00 00 key on ICO
VK_ICO_CLEAR







ここから下のは普通使わないんじゃないかと思います。
普通の109キーボードでは対応するキーは無いと思います。
参考程度にどうぞ。


NEC PC-9800 キーボード
定数 キー操作 キー操作
VK_OEM_NEC_EQUAL '=' key on numpad


Fujitsu/OASYS キーボード
定数 キー操作 キー操作
VK_OEM_FJ_JISHO Dictionary キー
VK_OEM_FJ_MASSHOU Unregister word キー
VK_OEM_FJ_TOUROKU Register word キー
VK_OEM_FJ_LOYA 左親指 キー
VK_OEM_FJ_ROYA 右親指 キー


Nokia/Ericsson definitions
定数 キー操作 キー操作
VK_OEM_RESET
VK_OEM_JUMP
VK_OEM_PA1
VK_OEM_PA2
VK_OEM_PA3
VK_OEM_WSCTRL
VK_OEM_CUSEL
VK_OEM_ATTN
VK_OEM_FINISH
VK_OEM_COPY
VK_OEM_AUTO
VK_OEM_ENLW
VK_OEM_BACKTAB
VK_ATTN
VK_CRSEL
VK_EXSEL
VK_EREOF
VK_PLAY
VK_ZOOM
VK_NONAME
VK_PA1
VK_OEM_CLEAR



- HOME -

GHP(仮)