[英]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.