Moai SDK を使う
 All Files Functions Variables Pages
スクリプト動作時間の取得

概要

スクリプトの紹介と実行

sample/elapsed_time.lua

1 --! \example
2 --! \brief スクリプトの経過時間を表示する
3 
4 MOAISim.openWindow("elapsed_time", 320, 240)
5 
6 
7 local function update()
8  while true do
9  print(MOAISim.getElapsedTime())
10  coroutine.yield()
11  end
12 end
13 
14 local thread = MOAICoroutine.new()
15 thread:run(update)
function Image_label new(arg_1st, width, height)
画像ラベル

実行結果の抜粋

$ moai elapsed_time.lua
Moai SDK 1.5 revision 1 (MoaiEdition)
0
0
0.016666666666667
0.033333333333333
0.05
0.066666666666667
0.083333333333333
0.1
0.11666666666667
0.13333333333333
0.15
0.16666666666667
0.18333333333333
0.2
0.21666666666667
0.23333333333333
0.25
0.26666666666667
0.28333333333333

説明

これは、起動してからの時間を表示し続けるスクリプトです。 画面を生成しないと処理が継続しないため MOAISim.openWindow() で画面を作成しています。
また、時間を表示するループは

while true do
print(MOAISim.getElapsedTime())
end

などと書くと、同じ値が表示され続けてしまうので注意しましょう。
(coroutine.yield() を呼び出さないと Moai SDK がバッググラウンドで行っている処理が実行されないためです)

タイマーモジュールの作成

では MOAISim.getElapsedTime() を使って、処理時間を計測する簡単なクラスを作成します。

lib/Timer.lua

1 --! \file
2 --! \brief タイマー
3 
4 _G.Timer = {}
5 
6 
7 function Timer:new(image_file, width, height)
8  local members = {
9  first_ticks_ = MOAISim.getElapsedTime(),
10  }
11 
12  Timer.__index = Timer
13  setmetatable(members, Timer)
14 
15  return members
16 end
17 
18 
19 function Timer:reset()
20  self.first_ticks_ = MOAISim.getElapsedTime()
21 end
22 
23 
24 function Timer:elapsed()
25  return MOAISim.getElapsedTime() - self.first_ticks_
26 end
_G window height
作成したウィンドウの高さ
Definition: Gui.lua:9
_G window width
作成したウィンドウの幅
Definition: Gui.lua:8

クラスが new() されたときと reset() で MOAISim.getElapsedTime() の値を取り込み elapsed() が呼び出された時に、その時点の MOAISim.getElapsedTime() との差を返すようになっています。
以下が、動作サンプルと実行結果です。

sample/timer_test.lua

1 --! \example
2 --! Timer.lua の動作サンプル
3 
4 package.path = "../lib/?.lua"
5 
6 require('Timer')
7 
8 
9 MOAISim.openWindow("elapsed_time", 320, 240)
10 
11 
12 local function update()
13  local timer = Timer:new()
14  local reset_interval = 0
15 
16  while true do
17  local elapsed_time = timer:elapsed()
18  if elapsed_time > reset_interval then
19  print('Hi!', reset_interval)
20 
21  -- 出力を行う間隔を、だんだん長くする
22  timer:reset()
23  reset_interval = reset_interval + 0.1
24  end
25  coroutine.yield()
26  end
27 end
28 
29 local thread = MOAICoroutine.new()
30 thread:run(update)
function Image_label new(arg_1st, width, height)
画像ラベル

実行結果の抜粋

$ moai timer_test.lua
Moai SDK 1.5 revision 1 (MoaiEdition)
Hi! 0
Hi! 0.1
Hi! 0.2
Hi! 0.3
Hi! 0.4
Hi! 0.5
Hi! 0.6