制作游戏,我应该在开始游戏之前加载所有精灵动画图像吗?

Making a game, should i load all the sprite animation images before start the game?

最好在开始之前将所有动画精灵加载到一个数组中,或者这样做也可以正常工作:

var frame = new Image();

function update(){
    window.requestAnimationFrame(update);
    ctx.drawImage(frame, x, y, width, height)
}

window.addEventListener("keydown", key => {
    if(key.keyCode == 65 || key.keyCode == 37){
        for(var i = 0; i <= 3; i++){
            frame.src = "./walkingspriteframes/frame"+i+".png";
        };
    }
})

预加载通常是最好的做法(至少对于经常使用的资产,例如动画精灵),原因如下:

  • 通过网络获取资源会产生延迟成本。当您在应该 运行 每秒 30-60 帧并快速响应用户输入的游戏中执行此操作时,它可能会显着降低玩家的体验。
  • 如果您是按需加载图片,您将需要考虑图片加载可能失败的可能性(例如,由于网络故障)以及在这种情况下应采取的措施。预加载的一个优点是,如果重要资产不可用,您可以选择不让游戏开始。

此外,您发布的代码可能无法像您预期的那样工作。它只会显示 frame3.png。这是因为浏览器中的 JavaScript 是单线程的: update 和 keydown 侦听器永远不会 运行 并发,所以 update 中的 ctx.drawImage 调用不会请参阅 frame.src 设置为 frame1.pngframe2.png