ことれいのもり

【PixiJS】Ticker.deltaTimeとTicker.deltaMSの違い

はじめに

PixiJSでは、ticker.deltaTimeとticker.deltaMSという似たものがあります。

UnityではdeltaTimeがフレーム間の秒数を取得していますが、ticker.deltaTimeでは全く違う物を返しています。

勘違いしていたせいで意図した挙動にならずに困っていたので、詳しく調べてみました。

前提

バージョン:PixiJS v8

参考リンク

Ticker.deltaTime

deltaTimeは前のフレームから現在のフレームまでに進んだ時間を「フレーム」単位で表します。

60FPS のとき、1フレーム進むと値が 1 になり、2フレーム進むと値が 2 になります。

30FPS のとき、1フレーム進むと値が 0.5 になり、2フレーム進むと値が 1.0 になります。

つまりフレームレートに依存するので、物理演算などで「秒」を計算するときは値がガンガン変わる可能性があります。

Ticker.deltaMS

deltaMSは前のフレームから現在のフレームまでに進んだ時間を「ミリ秒」単位で表します。

経過時間がミリ秒で取得できるので、フレームレートに依存せず取得できます。

ミリ秒ではなく秒にしたいときは、1000で割って単位変換しましょう。

物理演算などに使うと良さそうです。

// 前のフレームから現在のフレームの時間を秒で取得する
const deltaTimeInSeconds = ticker.deltaMS / 1000;

まとめ

フレームレートを気にしない ⇒ ticker.deltaTime

フレームレートを気にする・物理演算 ⇒ ticker.deltaMS

ゲーム制作で使うときは、ticker.deltaMSの方がよさげ

おわりに

ticker.deltaTimeとticker.deltaMSについてまとめてみました。

元々Unityを使っていたため、deltaTimeで経過時間をフレーム単位で返すと言うことに気づかず、かなり回り道をしてしまいました。

どんな言語でも思い込みをせずに、ドキュメントを読んでから実装することが大切ですね。

これ以外にも色々な値がtickerから取得できるので、自分で使ってみて試すのが良いと思います。