キー入力の検知
llTakeControls(integer controls, integer accept, integer pass_on)
CONTROL_FWD | 0x00000001 | 前進。Wキーまたは↑キー |
CONTROL_BACK | 0x00000002 | 後退。Sキーまたは↓キー |
CONTROL_LEFT | 0x00000004 | 左移動。SHIFTキー + AキーまたはSHIFTキー + ←キー |
CONTROL_RIGHT | 0x00000008 | 右移動。SHIFTキー + DキーまたはSHIFTキー + →キー |
CONTROL_UP | 0x00000010 | 上移動。EキーまたはPgUp?キー |
CONTROL_DOWN | 0x00000020 | 下移動。CキーまたはPgDn?キー |
CONTROL_ROT_LEFT | 0x00000100 | 左回転。Aキーまたは←キー |
CONTROL_ROT_RIGHT | 0x00000200 | 右回転。Dキーまたは→キー |
CONTROL_LBUTTON | 0x10000000 | 左クリック |
CONTROL_ML_LBUTTON | 0x40000000 | マウスルックでの左クリック |
FALSE FALSE | 機能的にキーコントロールを設定するのみ |
FALSE TRUE | 機能的に制御はされるが、見かけの効果はない |
TRUE FALSE | 機能的に制御がされ、キーコントロールイベントも発生する |
llGetPermissions()?でPERMISSION_TAKE_CONTROLSの許可があるかどうかを確認する必要がある。許可がない場合、llRequestPermissions()?を用いて許可を得なければならない
control(key id, integer held, integer change) { integer pressed = held & change; integer down = held & ~change; integer released = ~held & change; integer inactive = ~held & ~change; if (pressed & CONTROL_LBUTTON) llOwnerSay("click"); }
default { state_entry() { //キーイベントに対するパーミッションを取得 llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS); // get permission to take controls } // パーミッションが変更されたときに起動 run_time_permissions(integer perm) { // permissions dialog answered if (perm & PERMISSION_TAKE_CONTROLS) { // we got a yes // UPキーと、Downキーの場合コントロールイベントが発生する // 様に設定 llTakeControls(CONTROL_UP | CONTROL_DOWN, TRUE, FALSE); // take up and down controls } } //コントロールイベントの発生 control(key id, integer held, integer change) { // something happened to one of our controls //発生したイベントの分類 if (held & CONTROL_UP) { // the "fly up" key is held llSetPos(llGetPos() + <0, 0, 0.25>); // move up } else if (change & held & CONTROL_DOWN) { // the "fly down" key was pressed llSetPos(llGetPos() + <0, 0, -0.25>); // move down } } }