LoginSignup
0
0

More than 5 years have passed since last update.

EgretEngineのゲームループの回し方

Posted at

2種類のゲームループの回し方

いくつかサンプルをみていると、ゲームループの回し方に複数あることに気づきました。

ループの起動パターンA

this.addEventListener(egret.Event.ENTER_FRAME, this.loop, this);

ループの起動パターンB

egret.Ticker.getInstance().register(loop, this);

APIドキュメントを確認してみる

パターンA: egret.Event.ENTER_FRAME

Event.ENTER_FRAME
[Broadcast Event] 次のフレームが開始されると、このコールバックが呼び出されます。このオブジェクトが表示されているかいないか関係なくこのイベントは発生します。

パターンB:

Public register( listener:Function,thisObject:any ,priority:number ):void
Language version: Egret 2.4
Runtime version: Web, Native
フレームを処理するコールバックを登録する。同じコールバック関数が登録された場合は無視されます。このメソッドの代わりにegret.startTickを使うことが推奨されています。
引数:
listener:Function フレーム処理のコールバック関数、第一引数に前のフレームと今回のフレームとの間のインタバールが渡されます

本命パターン?のegret.startTick

どこにもstartTickなるメソッドはないw

startTickのサンプルとドキュメント

時間制御

2.Ticker heartbeat

グローバル関数のegret.startTick (停止はstopTick)により、60フレーム毎にコールバック関数が呼び出されます。ENTER_FRAMEイベントとは異なります。ENTER_FAMEイベントはフレーム毎に発生します。フレームレートを変更すればコールバックの呼び出し間隔も変わります。startTickはフレームレートに影響されません。
サンプルコード:

       this.time = egret.getTimer();
        egret.startTick(this.moveStar,this);
    }
    private moveStar(timeStamp:number):boolean {
        var now = timeStamp;
        var time = this.time;
        var pass = now - time;
        console.log("moveStar: ",(1000 / pass).toFixed(5));
        this.time = now;
        return false;
    }

ENTER_FRAMEのサンプルとドキュメント

3. Frame event

フレームイベントENTER_FRAMEは次のフレームの開始時に発生します。設定されたフレームレートに依存します。

結論

  1. egret.DisplayObject#addEventListener(egret.Event.ENTER_FRAME,...); を使いましょう
  2. index.htmlで指定したフレームレートが有効になります
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0