目次
Defoldのtimer
関数について
Defoldエンジンには、時間ベースのイベントを簡単に管理するための timer
モジュールが組み込まれています。このモジュールの中でも、特によく使われるのが timer.delay()
関数です。
1. timer.delay()
説明:
指定した時間(秒)後に関数を実行します。
引数:
- delay: 実行までの遅延時間(秒)
- repeat: タイマーをリピートするかどうかの真偽値。trueでリピート、falseで一回限りの実行。
- callback: 遅延時間経過後に実行される関数。
使用例:
local function on_timer_completed(self, handle, time_elapsed) print("3秒経過!") end timer.delay(3, false, on_timer_completed)
2. timer.cancel()
説明:
以前に設定されたタイマーをキャンセルします。
引数:
- handle: キャンセルするタイマーのハンドル。これは通常、
timer.delay()
の戻り値として得られます。
使用例:
local handle = timer.delay(3, false, on_timer_completed) timer.cancel(handle) -- これでタイマーは実行されません。
使用上の注意点:
timer.delay()
は、ゲームやアプリの状況によっては実行時にわずかな遅延が発生することがあります。絶対的な時間の正確さが必要な場合は、他の手段を検討することをおすすめします。- タイマーが必要なくなったときや、シーンを変更する前には、忘れずに
timer.cancel()
でタイマーをキャンセルすることをおすすめします。
タイマーをキャンセルする理由
timer.delay()
などのタイマー関数を使用する際、指定した時間後に実行されるコールバックが設定されます。しかし、そのタイマーが実際にトリガーされる前にシーンが変更された場合や、関連するゲームオブジェクトが削除された場合、以下のような問題が生じる可能性があります。
- 存在しないオブジェクトへのアクセス: タイマーのコールバックがトリガーされると、そのコールバック内で参照されているオブジェクトが既に削除されている場合、エラーが発生します。
- 意図しない動作: タイマーが予期しないタイミングで実行されると、ゲームの動作に予期しない副作用を引き起こすことがあります。
- リソースの浪費: 必要なくなったタイマーがメモリ上に残ってしまうことで、無駄にリソースを消費する可能性があります。
このような理由から、特にシーンの変更や関連するオブジェクトの削除を行う前に、アクティブなタイマーをキャンセルすることが推奨されています。これにより、エラーや予期しない動作のリスクを低減することができます。
コメント