inkey( [入力条件] ) 戻り値: キーコード, キー状態, メタキー状態
押されたキーコードとキーの状態とメタキーの状態を取得します。
inkey命令は引数により、機能が変ります。
- inkey() 即座にキーコードとキーの状態を返します。
- inkey(0) 即座にキーコードとキーの状態を返します。
- inkey(1) キーが押されるまで待機し、押されていればキーコードとキーの状態を返します。
- inkey(2) キーから指が離れるまで待機し、離れていれば、キーコードとキーの状態を返します。
- inkey(3) キーが指が離れている状態から押して、さらに指が離れるまで待機します。指が離れれば、キーコードとキーの状態とメタキーの状態を返します。
inkey命令は、戻り値を3つ持ちます。最終に押されたキーコードとキーの状態とメタキーの状態が返ります。
下記にキーの状態の値と意味を示します。
- 0: キーが押されている
- 1: キーが押されていない
- 2: その他?
2は返ってきたことが無いので意味不明です。
キーコードはAndroid固有のものです。メタキーの状態値も固有のようです。メタキーもキーコードを持っているので、同時押しを認識するには、面倒ですがコードを書かなければいけません。使用例 2に2個押しのキーを取得するソースを書いておきます。
使用例 1
------------------------------------------ -- キー入力 使用例 1 ------------------------------------------ --スクロールするテキスト表示 function printscrl( str, fontsize, fcolor, bcolor ) local w,h = canvas.getviewSize() local sc sc = canvas.putTextBox( str, 0, h+1, fontsize, fcolor, w ) canvas.getg( 0, fontsize*sc, w-1, h-1, 0, fontsize*sc, w-1, h-1 ) canvas.putg( 0, 0, w-1, h-fontsize*sc-1, 0, fontsize*sc, w-1, h-1 ) canvas.putRect( 0, h-fontsize*sc-1, w, h, bcolor, 1 ) canvas.drawTextBox( str, 0, h-fontsize*sc, fontsize, fcolor, w ) end ------------------------------------------ --メイン ------------------------------------------ function main() local d = 1 local a while(d==1)do k,a,m = inkey() printscrl( k.." "..a.." "..m, 16, color(255,255,255), color(0,0,255) ) x,y,d = touch() end end main() system.exit()
シフトボタンとスペースキーの両押しを取得するコードです。が、inkey()を取る間に、シフト→シフト+スペースという風に押されてしまうと、切り分けができなくなって、キーの分離ができないです。
使用例 2
------------------------------------------ -- キー入力 使用例 2 ------------------------------------------ --スクロールするテキスト表示 function printscrl( str, fontsize, fcolor, bcolor ) local w,h = canvas.getviewSize() local sc sc = canvas.putTextBox( str, 0, h+1, fontsize, fcolor, w ) canvas.getg( 0, fontsize*sc, w-1, h-1, 0, fontsize*sc, w-1, h-1 ) canvas.putg( 0, 0, w-1, h-fontsize*sc-1, 0, fontsize*sc, w-1, h-1 ) canvas.putRect( 0, h-fontsize*sc-1, w, h, bcolor, 1 ) canvas.drawTextBox( str, 0, h-fontsize*sc, fontsize, fcolor, w ) end ------------------------------------------ --メイン ------------------------------------------ function main() d = 1 cflg = 2 while(d==1)do k,a,m = inkey() if(k~=59)then if(a==1 and m==0)then keycode = 0 elseif(a==0 and m==0)then keycode = 2 elseif(a==0 and m==65)then keycode = 3 elseif(a==1 and m==65)then keycode = 1 else keycode = 0 end cflg = 2 else if(a==1 and m==0)then if(cflg~=1 and keycode==3)then keycode = 2 elseif( cflg~=1 and (keycode==1 or keycode==2))then keycode = 0 end cflg = 1 elseif(a==0 and m==65)then if(cflg~=0 and keycode==0)then keycode = 1 elseif(cflg~=0 and (keycode==1 or keycode==2))then keycode = 3 end cflg = 0 end end if( keycode==0)then printscrl( "non", 16, color(255,255,255), color(0,0,255) ) elseif( keycode==1)then printscrl( "Shift", 16, color(255,255,255), color(0,0,255) ) elseif( keycode==2)then printscrl( "Space", 16, color(255,255,255), color(0,0,255) ) elseif( keycode==3)then printscrl( "Shift and Space", 16, color(255,255,255), color(0,0,255) ) end x,y,d = touch() end end main() system.exit()