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

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

SmartWatch用スクリプトのサンプルです

Luarida v1.84Betaに SmartWatch用のコマンドを追加しました。そこで、これらのコマンドを使ったサンプルソースをアップしておきます。
先ずは動画から。

SmartWatch向けドロイド君プログラム

今回追加した全てのコマンドを使用してサンプルプログラムを作っています。グラフィックの描画、スプライトの使い方、タッチコマンドなど、従来のLuaridaのプログラミングと同じです。フラッシュ先がSmartWatchであったり、タッチ画面がSmartWatch画面になっているだけです。
画面サイズも128×128にセットしていますが、特にサイズ変更しなくても、Bitmapキャッチャ側で全画面表示にすれば、自動的に縮小して表示します。

------------------------------------------
--SmartWatch向けドロイド君プログラム
------------------------------------------
--関数宣言--------------------------------
main={}           --mainメソッド
workdroiddraw={}  --ドロイドくんをWorkBMPのx,y座標に描きます
--グローバル変数宣言----------------------
------------------------------------------
mt={}
mt.__newindex=function(mtt,mtn,mtv)
  dialog( "Error Message", "宣言していない変数 "..mtn.." に値を入れようとしています", 0 )
  toast("画面タッチで実行を続けます", 1)
  touch(3)
end
mt.__index=function(mtt,mtn)
  dialog( "Error Message", "変数 "..mtn.." は宣言されていません", 0 )
  toast("画面タッチで実行を続けます", 1)
  touch(3)
end
setmetatable(_G,mt)
--------以下が実プログラム----------------
------------------------------------------
-- ドロイドくん(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+6,dcol)
 canvas.putLine( x+16,y+0,x+20,y+6,dcol)
 canvas.putLine( x+40,y+0,x+35,y+6,dcol)
 canvas.putLine( x+40,y+0,x+34,y+6,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+46,y+48,dcol,1 )
 canvas.putRect( x+15,y+48,x+42,y+51,dcol,1 )
 --足を描く
 canvas.putCircle( x+22,y+61,4,dcol, 1 )
 canvas.putRect( x+18,y+51,x+26,y+61,dcol,1 )
 canvas.putCircle( x+34,y+61,4,dcol, 1 )
 canvas.putRect( x+30,y+51,x+38,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+56,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+8,y+40,dcol,1 )
 --体をWorkBMPに取得する
 canvas.getg( x,y+20,x+55,y+64, wx, wy+20, wx+55, wy+64 )
end
------------------------------------------
-- メイン関数
------------------------------------------
function main()
 local gwide,gheight = 128, 128
 --内部グラフィック画面設定の変更
 canvas.setMainBmp( gwide, gheight )
 canvas.setWorkBmp( gwide, gheight )
 canvas.putCls()  --メイン画面のクリア
 canvas.workCls() --ワーク画面のクリア
 --ドロイドくんをWorkBMPのx,y座標に描きます
 local xs = 56  --ドロイドくんの横幅(表示時)
 local ys = 65  --ドロイドくんの高さ(表示時)
 workdroiddraw( 0, 0,color(164,198,57) )  --普通のドロイド君描画
 workdroiddraw( 56, 0,color(255,0,0) )    --赤色のドロイド君描画

 sprite.init()  --スプライトの初期化
 sprite.define( 1, 0, 0, xs-1, ys-1)      --普通のドロイド君をスプライト1番に定義
 sprite.define( 2, 56, 0, 56+xs-1, ys-1)  --赤色のドロイド君をスプライト2番に定義
	
 --bitmapcatcherを起動します
 swatch.start()

 local fps = system.getSec() + 1/3  --秒3枚の画面更新をする 
 local h = 22
 local px = gwide/2
 local py = gheight/2
 local lx, ly = 0, 0
 local droidangle
 local vib={}
 local vibCnt = 0
 local BCol = color(0,0,0)
 local x,y,s = 0,0,0

 while(true)do
   --SmartWatchの加速度を取得
   local ax, ay, az = swatch.getAccel()
   --角度計算
   droidangle = 180 - math.atan2( ax, -ay )*57.29577951
   canvas.putCls( BCol )
   canvas.putText( string.format("X= %f",ax), 0, h,  18, color(255,255,255) )
   canvas.putText( string.format("Y= %f",ay), 0, h+20,  18, color(255,255,255) )
   canvas.putText( string.format("Z= %f",az), 0, h+40,  18, color(255,255,255) )
   canvas.putText( string.format("a= %f",droidangle), 0, h+60,  18, color(255,255,255) )
   canvas.putText( string.format("s= %f",s), 0, h+80,  18, color(255,255,255) )
   --Android画面に数値表示
   canvas.putflush()

   lx = lx - ax*2
   px = px + lx
   if(px<ys/2)then
     px = ys/2
     lx = 0
   elseif( px>gwide-ys/2 )then
     px = gwide-ys/2
     lx = 0
   end
   ly = ly + ay*2
   py = py + ly
   if(py<ys/2)then
     py =ys/2
     ly = 0
   elseif( py>gheight-ys/2 )then
     py = gheight-ys/2
     ly = 0
   end

   --スプライト1番へのタッチ有無の検出
   vib = swatch.stouch(1)
   if(#vib>0)then
     --タッチしていた
     BCol = color(255,255,0)  --背景を黄色にする
     sprite.move( 1, 0, px, py,1,1, droidangle)  --1番スプライトのリムーブ
     sprite.move( 2, 1, px, py,1,1, droidangle)  --2番スプライトセット
     --バイブレータを振動させる
     swatch.vibrator(100)
   else
     --タッチしていない
     BCol = color(0,0,0)  --背景を黒にする
     sprite.move( 1, 2, px, py,1,1, droidangle)  --1番スプライトセット
   end

   canvas.putCls( BCol ) --背景描画
   sprite.put()          --スプライト描画
   swatch.putflush()     --SmartWatch画面に転送

  while( fps>system.getSec() )do end --表示タイミング待ち
  fps = system.getSec() + 1/3

  --画面タッチ状態の取得
  x,y,s = swatch.touch()
  --下スィープならばループから抜ける
  if( s==4 )then break end
 end
 --Bitmapキャッチャの終了
 swatch.stop()
end
main()
system.exit()