gpt4 book ai didi

javascript - 检查图像是否在游戏循环之前加载

转载 作者:太空宇宙 更新时间:2023-11-04 14:18:31 26 4
gpt4 key购买 nike

到目前为止,我的程序正在按我希望的方式运行。这很好用:

// Player object
var player = {
x: 10,
y: 10,
draw: function () {
ctx.drawImage(playerImg, 0, 0);
...
  1. 我是否应该先检查 playerImg 是否已加载,即使它到目前为止工作正常?

  2. 此外,最好的检查方法是什么。我正在考虑将所有图像放在一个数组中。然后检查 onLoad 函数。如果它们都已加载,那么我将开始游戏循环。这是个好主意吗?

谢谢

最佳答案

图片加载的工作原理

您需要检查图像是否已加载,因为图像加载是异步的。您可能会遇到您的代码有时没有工作。这主要是因为您的图像存在于缓存中并且浏览器能够在调用 drawImage 之前足够快地加载它,或者图像存在于本地磁盘上。

但是,新用户需要先下载数据,您不希望新用户遇到错误,例如由于未完成加载而无法显示图片。

由于它异步工作,您的代码将继续执行图像加载在后台进行。这可能会导致您的代码在图像加载完成之前执行。所以处理图片加载很重要

处理多张图片

您可以首先加载所有图像(或您需要开始的图像),然后您可以使用数组定义它们:

var imageURLs = [url1, url2, url3, ...],
images = [],
count = imageURLs.length;

然后迭代并创建图像元素:

for(var i = 0; i < count; i++) {

/// create a new image element
var img = new Image();

/// element is valid so we can push that to stack
images.push(img);

/// set handler and url
img.onload = onloadHandler;
img.src = imageURLs[i];

/// if image is cached IE (surprise!) may not trigger onload
if (img.complete) onloadHandler().bind(img);
}

并在回调函数中进行库存盘点:

function onloadHandler() {
/// optionally: "this" contains current image just loaded
count--;
if (count === 0) callbackDone();
}

您的回调是您接下来要执行的代码。您的图像将以与 imageURLs 相同的顺序位于数组 images 中。

对于生产,您还应该包含一个 onerror 处理程序,以防出现问题。

关于javascript - 检查图像是否在游戏循环之前加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18974517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com