我正在尝试将10张不同的图片加载到画布中。我的计划是最终制作这些图像的动画,但现在它们似乎在互相覆盖。这是我的代码:
var DrawLetters = function()
{
for (i = 0; i < howManyLetters; i++)
{
thisWidth = letters[i][0];
thisHeight = letters[i][1];
imgSrc = letters[i][2];
letterImg = new Image();
letterImg.onload = function()
{
context.drawImage(letterImg,thisWidth,thisHeight);
}
letterImg.src = imgSrc;
}
};
letters是一个包含10个元素的数组,其中每个元素都包含一个指向图像的路径。对此的任何帮助将不胜感激。
答案 0 :(得分:4)
我已经尝试过你的代码,而onload方法总是使用vars的LAST值,而不是迭代数组时的值。
尝试将X和Y设置为图像对象的属性:
// I assume you are storing the coordinates where the letters must be
letterImg.setAtX = letter[i][XPOS];
letterImg.setAtY = letter[i][YPOS];
并在onload上:
context.drawImage(this, this.setAtX, this.setAtY);
this
是举起onload
事件的图片。
编辑我已经更改了用于传输坐标的属性。现在他们被设置为AtX / Y.你不能使用x和y,因为它们是保留的。
答案 1 :(得分:1)
你在同一点上画它们。 drawImage不关心给定参数的高度或宽度;它只是想要一个图像和一个坐标。见https://developer.mozilla.org/en/Canvas_tutorial/Using_images
所以,你需要为你的图像提供更多数据;类似的东西:
thisWidth = letters[i][0];
thisHeight = letters[i][1];
imgSrc = letters[i][2];
thisX = letters[i][3]; //<---
thisY = letters[i][4]; //<---
letterImg = new Image();
letterImg.onload = function()
{
context.drawImage(letterImg, thisX, thisY, thisWidth, thisHeight);
//or, just
context.drawImage(letterImg, thisX, thisY);
}
letterImg.src = imgSrc;
编辑:刚想了一下 - 你可以动态地做到这一点:
context.drawImage(letterImg, letters[i-1][0]+thisWidth, letters[i-1]+thisHeight, thisWidth, thisHeight);
通过这种方式你必须检查东西,但我认为你得到了整体意图。
答案 2 :(得分:0)
每次都必须重新定位绘图开始位置,以免图像被覆盖。
[context . drawImage(image, dx, dy, dw, dh)][1]
链接上有一个图像,说明每个参数的含义。