繁体   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