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

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

Luarida v1.72Betaを公開しました

今回のバージョンアップでキー入力をサポートしました。さらに、スプライト機能を実装しました。従来のcanvas.put()との違いは、canvas.put()ではコマンドが実行されるたびに、LuaVMからDalvikにputコマンドを送信していたのですが、スプライトを使った場合、一度の転送で一気に全ての設定画像を表示します。大まかな違いはこれだけです。後は拡大縮小と回転を1コマンドでサポートしました。
直接のダウンロードはここから(Luarida v1.72Beta)。マーケットはここから
最新版の入手はカテゴリの「Luarida最新版」を見てください。

キー入力の例

inkey()コマンドを使ってキーコードし状態を取得している例を下記に書いておきます。詳細は説明書きをみてください。画面タッチで終了します。

------------------------------------------
-- キー入力のテストです
------------------------------------------
while(true)do
  k,s = inkey()
  x,y,d = touch()
  if(d==0)then break end
  canvas.putText("KeyCode: "..k.."  ",0,0,24,color(255,255,255),color(0,0,0))
  canvas.drawText("Status: "..s.."  ",0,30,24,color(255,255,255),color(0,0,0))
end
system.exit()

スプライトの例

以下にスプライトの例を示します。秋らしくていいデモだなぁと思ってプログラムを書いていたのですが、思いっきりスプライトの実装でミスっていることに気づきました。

実は、スプライト画像に縦横の倍率を指定できるのですが、この倍率を回転した後の画像に対して掛けていました。倍率を変えた後に回転させなきゃダメですね。おおー修正しなきゃ。以下ソースです。

------------------------------------------
--スプライトのテストです
------------------------------------------
--画面サイズ取得
Gwide, Gheight = canvas.getviewSize()
------------------------------------------
-- ドロイドくん(56×65)をWorkBMPのx,y座標に描きます
------------------------------------------
function workdroiddraw( wx, wy, dcol )
local ecol = color(255,255,255)
local x, y = 0, 0
 --MainBMPを透明色に塗りつぶす
 canvas.putCls()
 --顔を描く
 canvas.putCircle( x+28,y+23,19,dcol, 1 )
 canvas.putCircle( x+20,y+13,1,ecol, 1 )
 canvas.putCircle( x+36,y+13,1,ecol, 1 )
 --角を描く
 canvas.putLine( x+16,y+0,x+19,y+5,dcol)
 canvas.putLine( x+16,y+0,x+20,y+5,dcol)
 canvas.putLine( x+40,y+0,x+35,y+5,dcol)
 canvas.putLine( x+40,y+0,x+34,y+5,dcol)
 --顔をWorkBMPに描画
 canvas.getg( x+10,y+0,x+45,y+19,wx+10,wy+0,wx+45,wy+19 )
 --再びMainBMPを透明色に塗りつぶす
 canvas.putCls()
 --体を描く
 canvas.putCircle( x+15,y+48,4,dcol, 1 )
 canvas.putCircle( x+41,y+48,4,dcol, 1 )
 canvas.putRect( x+10,y+22,x+45,y+48,dcol,1 )
 canvas.putRect( x+15,y+48,x+41,y+51,dcol,1 )
 --足を描く
 canvas.putCircle( x+22,y+61,4,dcol, 1 )
 canvas.putRect( x+18,y+51,x+25,y+61,dcol,1 )
 canvas.putCircle( x+34,y+61,4,dcol, 1 )
 canvas.putRect( x+30,y+51,x+37,y+61,dcol,1 )
 --腕を描く
 canvas.putCircle( x+52,y+24,4,dcol, 1 )
 canvas.putCircle( x+52,y+41,4,dcol, 1 )
 canvas.putRect( x+48,y+25,x+55,y+40,dcol,1 )
 canvas.putCircle( x+4,y+24,4,dcol, 1 )
 canvas.putCircle( x+4,y+41,4,dcol, 1 )
 canvas.putRect( x+0,y+25,x+7,y+40,dcol,1 )
 --体をWorkBMPに取得する
 canvas.getg( x,y+20,x+55,y+64, wx, wy+20, wx+55, wy+64 )
end
------------------------------------------
-- メインです
------------------------------------------
function main()
 --ドロイド君を描きます
 workdroiddraw( 0, 0, color(164,198,57) )
 workdroiddraw( 56, 0, color(255,0,0) )
 workdroiddraw( 112, 0, color(255,255,0) )
 --スプライトの初期化 
 sprite.init()
 --30個のドロイド君を定義
 for i=0, 27, 3 do
   sprite.define( i, 0, 0, 55, 64 )
   sprite.define( i+1, 56, 0, 111, 64 )
   sprite.define( i+2, 112, 0, 167, 64 )
 end
 while(true)do
   for i=0, 9 do
     b = math.random(3)/2 
     kaku = math.random(359) 
     x = math.random(Gwide)
     y = math.random(Gheight)
     sprite.move( i, 1, x, y, b, b, kaku  )
     y = math.random(Gheight)
     sprite.move( i+10, 1, x, y, b, 1, kaku  )
     x = math.random(Gwide)
     sprite.move( i+20, 1, x, y, 1, b, kaku  )
   end
   canvas.putCls( 2147483648+math.random(16777215) )
   sprite.put()  --一気に描きます
   canvas.putflush()
   x,y,s = touch()
   if(s==0)then break end
 end 
end
main()
system.exit()