是否可以在HTML5画布中使用多个图像?

时间:2011-04-14 13:10:53

标签: javascript image html5 canvas

我正在尝试将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个元素的数组,其中每个元素都包含一个指向图像的路径。对此的任何帮助将不胜感激。

3 个答案:

答案 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]

链接上有一个图像,说明每个参数的含义。