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

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

時間関連のサンプル

Luaridaで時間を扱うサンプルです。ダウンロードはここから(timesample.apk)。

年月日と時分秒

Luaridaで年月日と時分秒を取得するコマンドは、os.date()です。これはLuaが持つ標準命令です。参照:http://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html#pdf-os.date

  • 年月日を取得する

例えば、os.date("%Y年%m月%d日")と書くと、%Y, %m, %dに年月日が入ります。

  • 時分秒を取得する

例えば、os.date("%H時%M分%S秒")と書くと、%H, %M, %Sに時分秒が入ります。

秒を取得する

system.getSec()を使うと、us精度の秒を求めることができます。

local us = system.getSec()

この数値を利用して、1秒よりも細かな時間差を計算することができるので、例のように250ms毎とに処理を行うといったことも可能です。

local psec = system.getSec()
 while(true)do
   while(psec>system.getSec())do end --250ms経つまで待つ
   psec = system.getSec() + 0.25

   --必要な処理を書く

 end

時間サンプルでは、ドロイド君が一秒に二回上下します。

時間コマンド使用サンプル動画


以下に、サンプルプログラムのソースを書いておきます。

------------------------------------------
--時間サンプル
------------------------------------------
--関数宣言--------------------------------
main={} --mainメソッド
------------------------------------------
LuaridaPath="/sdcard/luarida/timesample" --luaファイルを保存しているPath
------------------------------------------
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)
--------以下が実プログラム----------------
------------------------------------------
--メインプログラム
------------------------------------------
function main()
local w,h
local x,y,s
local b = color(0,0,0)
local wh = color(255,255,255)
local droidbmp
local ch = 0
local sec, psec
local cx, cy
 --画面サイズ取得
 w,h = canvas.getviewSize()
 cx = w/2
 cy = h/2
 --背景を白にする
 canvas.drawCls( wh )
 --ワークエリア画面をクリアします
 canvas.workCls()
 --ワークに背景を確保する
 canvas.getg( 0, 0, 63, 63, 64, 0, 127, 63 )
 --ワークエリアの(0,0)-(79,93)に、ドロイド画像を読み込みます
 droidbmp = LuaridaPath.."/".."droid0.png"
 if( canvas.loadBmp( droidbmp, 0, 0, 63, 127 )==-1)then
   dialog( droidbmp, "ロードに失敗しました",1 )
   do return end
 end
 toast("画面中央付近をタッチすると終了します", 0 )
 --画面上にセンタリングして年月日を描く
 canvas.putTextRotate( os.date("%Y年%m月%d日"), cx, 24, 0, 24, b )
 psec = system.getSec()
 while(true)do
   while(psec>system.getSec())do end --250ms経つまで待つ
   psec = system.getSec() + 0.25
   ch = 1 - ch
   --背景を描きます
   canvas.putg( cx-32, cy-32, cx+31, cy+31, 64, 0, 127, 63 )
   --ドロイド君を描きます
   canvas.putg( cx-32, cy-32, cx+31, cy+31, 0, ch*64, 63, ch*64+63 )
   --時刻を表示します。drawTextCenterを使っているので、putflush()しなくてもflushされます。
   canvas.drawTextCenter( os.date(" %H時%M分%S秒"), cx, cy+60, 24, b, wh )
   x,y,s = touch()
   if( s~=1 )then
     if( x>=cx-40 and x<=cx+40 and y>=cy-40 and y<=cy+40 )then break end
   end
 end
end
main()