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