簡體   English   中英

限制 Phaser3 更新率的方法?

[英]Ways to limit Phaser3 update rate?

在我的 Phaser3 游戲中,有一個全局 gameTick 變量,每次更新都會遞增。 我每 100 次更新就使用它在我的游戲中生成敵人。

這是我的場景類中發生的事情的簡化示例:

update () {
    global.gameTick++;

    if (global.gameTick % 100 === 0) {
        this.spawnAlien();
    }
}

這很好用,但是一旦用戶在刷新率 >60hz 的顯示器上玩游戲,更新時間就會中斷,並導致外星人更頻繁地生成。

我檢查了this.physics.world.fps ,它是 60。我也可以修改this.physics.world.timescale ,但是我必須為每個刷新率做一個巨大的 switch 語句。

要么我缺少一個明顯的解決方案,要么我的global.gameTick方法不是完成這項任務的有效方法。

到目前為止,這就是我的配置中的內容

let config = {
    type: Phaser.AUTO,
    backgroundColor: "#000",
    scale: {
        parent: "game",
        mode: Phaser.Scale.FIT,
        width: 1900,
        height: 600,
    },
    physics: {
        default: "arcade",
        arcade: {
            debug: true,
            fps: 60 // doesn't fix update frequency
        },
        fps: { // not sure if this is even doing anything
            max: 60,
            min: 20,
            target: 60,
        }
    },
    pixelArt: true,
};

我原來的帖子完全不正確。 this.physics.world.setFPS()僅限制物理模擬的更新速率。

要實際限制更新速率,請使用以下方法。

// The time and delta variables are passed to `update()` by Phaser
update(time, delta) {
    this.frameTime += delta

    if (this.frameTime > 16.5) {  
        this.frameTime = 0;
        g.gameTick++;
        // Code that relies on a consistent 60hz update
    }
}

這會累積最后一幀和當前幀之間的毫秒數。 如果有 16.5 毫秒的延遲,它只會運行update()代碼。

上面的示例適用於 60fps,但如果您想將 FPS 限制為不同的值,請使用公式: delay = 1000/fps

原帖:


從 v3.21.0 開始,配置中的 FPS 設置似乎已被竊聽。

我所要做的就是使用this.physics.world.setFPS(60); 從我的場景課。 這完美地限制了更新率,我沒有問題。

您還可以在游戲的配置對象中設置以下屬性:

fps: {
  target: 24,
  forceSetTimeOut: true
},

資料來源: https ://phaser.discourse.group/t/how-to-limit-fps-with-phaser-3/275/14?u=saricden

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM