コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

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()