相位器的性能.js



function preload() {
this.load.image('background', 'images/table_en.png.webp');
this.load.image('wheel', 'images/UpperWheel.png.webp');
this.load.image('ball', 'images/ball.png.webp');
roulette.circle.array.forEach(i => {
this.load.image(`${i.index}`, i.src);
});
roulette.lever.array.forEach(i => {
this.load.image(`${i.index}`, i.src)
});
}
function update() {
if (roulette.circle.previousCircle) {
roulette.circle.previousCircle.destroy()
}
if (roulette.circle.previousLever) {
roulette.circle.previousLever.destroy();
}
if (roulette.circle.currentStep === 100 && run) {
ball.run = true;
}
let circle = this.add.image(108, 110, `circle${roulette.circle.currentStep}`).setOrigin(0, 0).setScale(0.7);
let lever = this.add.image(200, 150, `lever${roulette.lever.currentStep}`).setOrigin(0, 0).setScale(0.7);
roulette.circle.method();
roulette.lever.method();
roulette.circle.previousCircle = circle;
roulette.circle.previousLever = lever;
}

我正在写轮盘赌,其中 359 张图片落在一个轮子上(考虑到它的所有条件(。我在预加载功能中上传了所有这些图片,在更新功能中,我只需创建下载的图片并删除前一张图片即可。所有这些都会影响生产力(因为更改图像的速度可能不同(。如何解决这个问题?

也许如果我降低图片的变化速度,问题就会得到解决,但我不知道该怎么做

update()方法每帧调用一次。Phaser 游戏中的默认目标帧数 (fps( 是 60 - API 参考。

游戏中的许多因素都会影响您将看到的实际fps。如果将其保留为默认值,则每秒大约调用 60 次update()方法。如果希望用户实际能够看到每个图像,这可能不是所需的行为。

您可以像这样降低游戏配置中的目标fps数:

{ 
type: Phaser.AUTO,
...,
fps: {
target: 30 // 30x per second
}
}

。但这可能并不完美。这是游戏更新速度的全局变化,您可能希望每秒发生 60 次的其他事情(例如检查输入等(。

要在不修改游戏fps的情况下更改图像更改的频率,请考虑创建一个单独的方法来处理图像的销毁/创建,并在update()中引用该方法。

function update() {
if (!changingImage) {
changingImage = true;
changeImage();
}
}
function changeImage() {
if (roulette.circle.previousCircle) {
roulette.circle.previousCircle.destroy()
}
if (roulette.circle.previousLever) {
roulette.circle.previousLever.destroy();
}
if (roulette.circle.currentStep === 100 && run) {
ball.run = true;
}
let circle = this.add.image(108, 110, `circle${roulette.circle.currentStep}`).setOrigin(0, 0).setScale(0.7);
let lever = this.add.image(200, 150, `lever${roulette.lever.currentStep}`).setOrigin(0, 0).setScale(0.7);
roulette.circle.method();
roulette.lever.method();
roulette.circle.previousCircle = circle;
roulette.circle.previousLever = lever;
changeImage = true;
}

如果它仍然发生得太快,请考虑将changeImage布尔值包装在超时中,以进一步延迟图像的更新频率。

setTimeout(() => {
changingImage = true;
}, 1000);

最新更新