Chapter 43

任意のタイミングからゲームの経過秒数をカウントする

alkn203
alkn203
2021.09.18に更新

deltatime

任意のタイミングで経過秒数カウントを開始する

これまでのゲームの経過秒数取得方法では、アプリケーションが開始された直後からカウントされるので、例えばタイトル画面から遷移後にカウントを表示すると既に何秒か経過した後の数字になってしまいます。
今回はこれを回避する方法について書きます。

app.deltaTimeプロパティ

// 経過時間管理用変数
var time = 0;
// 更新処理
this.update = function(app) {
  // 経過時間更新
  time += app.deltaTime;
  // 経過秒数表示
  label.text = '経過秒数:' + Math.floor(time / 1000);
};
  • update関数の引数appdeltadTimeプロパティで、前の1フレームにかかった時間を得ることができます。
  • 管理用の変数を用意して、更新処理でdeltaTimeを加算していけば、結果的にその値が経過時間となります。

サンプルコード

コードを見る
// グローバルに展開
phina.globalize();
/*
 * メインシーン
 */
phina.define("MainScene", {
  // 継承
  superClass: 'DisplayScene',
  // コンストラクタ
  init: function() {
    // 親クラス初期化
    this.superInit();
    // ラベル
    var label = Label({
      text: '',
      fontSize: 48,
      x: this.gridX.center(),
      y: this.gridY.center(),
    }).addChildTo(this);
    // 経過時間管理用変数
    var time = 0;
    // 更新処理
    this.update = function(app) {
      // 経過時間更新
      time += app.deltaTime;
      // 経過秒数表示
      label.text = '経過秒数:' + Math.floor(time / 1000);
    };
  },
});
/*
 * メイン処理
 */
phina.main(function() {
  // アプリケーションを生成
  var app = GameApp({
    title: '経過秒数表示',
  });
  // 実行
  app.run();
});

runstantプロジェクト

https://runstant.com/alkn203/projects/f9343cc3