JavaScript 游戏在较新的 MacBook 上运行速度超快

问题描述 投票:0回答:1

所以我制作了 Flappy Bird 的 JavaScript 克隆版。它在我的 2021 M1 iMac 上运行得非常漂亮,几乎完美......

它在我的 2023 M2 MacBook Pro 上也运行得相当好,除了一些小故障。然而,这只是我使用 Safari 时的情况。在这台 MacBook 上的 Chrome 中打开游戏,其运行速度似乎提高了一倍。

不同的移动设备也有各种故障,但使用相同浏览器的其他相同型号则没有。

我很困惑。感谢您的帮助。

这是我的重力函数:

function startGravity() {

    function gravity() {
        velocity += gravityConstant;
        let position = parseInt(getComputedStyle(bird).top) + velocity;
        bird.style.top = `${position}px`;

        loops.gravityAnimation = requestAnimationFrame(gravity);
    }

    loops.gravityAnimation = requestAnimationFrame(gravity);
}

这是在屏幕上滑动障碍物的功能:

function runShips() {
    //create random ship every 5 seconds
    generateShipsInterval();

    function slideShipsAnimation() {
        document.querySelectorAll('.ships').forEach(ship => {
            ship.style.left = `${parseInt(getComputedStyle(ship).left) - 3}px`;
        });
        loops.slideShipsAnimation = requestAnimationFrame(slideShipsAnimation);
    }
    //run all ships across the screen
    loops.slideShipsAnimation = requestAnimationFrame(slideShipsAnimation);
}

我知道这与帧速率有关,因为尝试实现增量时间会改变速度,但会导致设备之间的不一致和更多故障。

javascript game-development frame-rate timedelta
1个回答
0
投票

更新:

所以我解决了很多问题。事实证明,问题是我使用了 parseInt 而不是 parseFloat。我认为下一个位置的不精确性导致了舍入问题,有时位置落后,导致不稳定。

现在几乎完美,但还不够完美。我认为改用 Translate() 可能会解决这个问题。

我现在遇到的问题是,当我在移动设备上点击跳跃时,它会短暂地导致障碍物移动不稳定。即使我禁用了 Jump() 逻辑,它也会执行此操作,表明事件侦听器单独负责。

如有任何更改,将进行更新。

© www.soinside.com 2019 - 2024. All rights reserved.