Cocos Code IDEを使ってLua言語で、一定時間ごとに処理を行うためのスケジューリングの基本です。
実行環境、IDE | Cocos2d-xバージョン | 言語 |
---|---|---|
Cocos Code IDE Mac OS X 1.0.0-RC2 | Cocos2d-x V3.2 | Lua言語 |
サンプルコード
プロジェクトの新規作成で作成されるGameScene.luaのGameScene.create()を書き換えます。
GameScene.lua/GameScene.create
function GameScene.create()
local scene = GameScene.new()
local function func(dt)
print(string.format("%f", dt)) -- dtには前回の呼び出しからの経過時間が入ります。
end
local schedulerID = cc.Director:getInstance():getScheduler():scheduleScriptFunc(func, 5, false)
return scene
end
実行すると5秒毎にfunc関数が呼び出されます。
解説
指定した時間間隔で関数を呼び出す
最初に呼び出される関数を準備します。ここでは関数名をfuncとしました。
local function func(dt)
-- dtには前回の呼び出しからの経過時間が入ります。
end
スケジューラーに登録する
local schedulerID = cc.Director:getInstance():getScheduler():scheduleScriptFunc(func, 5, false)
この例では、5秒毎にfunc関数を呼び出します。呼び出される時間には必ず誤差があります。
最後の引数はfalseにします。
また、後でスケジュールを停止できるようにIDを保存しておきます。
スケジュールを停止するとき
-- schedulerIDにはスケジューラーのIDが入っているとして、
cc.Director:getInstance():getScheduler():unscheduleScriptEntry(schedulerID)
必要がなくなった時や、exitイベントなどでスケジュールを停止します。
(イベントについては「イベント処理を行う」の投稿を参照してください。)
Cocos2d-xをC++で扱っていた時の、updateの代わりの関数を作る例
updateの代わりの呼び出される関数を準備します。(サンプルプログラムの関数名がtickでしたので、そのままtickを使っています。)
local function tick(dt)
end
次に毎フレームtickを呼び出すようにします。時間には0を指定します。
-- 毎フレームtickを呼び出す
local schedulerID = cc.Director:getInstance():getScheduler():scheduleScriptFunc(tick, 0, false)
必要がなくなった時や、exitイベントなどでスケジュールを停止します。
(イベントについては「イベント処理を行う」の投稿を参照してください。)
-- スケジュールを停止するとき
cc.Director:getInstance():getScheduler():unscheduleScriptEntry(schedulerID)