DrawImage не работает

У меня есть прототип Sprite с функцией конструктора...

function Sprite(img) {
    for (var property in img) this[property] = image[property];
}

... который принимает объект изображения и делает его копию. Теперь я пытаюсь нарисовать спрайт с помощью drawImage:

Sprite.prototype.draw = function(ctx, x, y) {
    ctx.drawImage(this, x, y);
}

это дает мне ошибку:

Uncaught TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': No function was found that matched the signature provided.

однако, если я использую фактический объект изображения и в остальном тот же точный код, т.е.:

Sprite.prototype.draw = function(ctx, x, y) {
    ctx.drawImage(img, x, y);
}

он работает именно так, как должен (img — это глобальное имя объекта изображения).

Это весь код прототипа Sprite. Я не понимаю, в чем разница, из-за которой это происходит, поскольку я добавил только одну функцию в Sprite; рисовать.


person jtht    schedule 29.09.2014    source источник
comment


Ответы (1)


Я подозреваю, что вы имеете в виду:

 this[property] = img[property]

Кроме этого, я думаю, что ваша копия более мелкая, чем вам нужно. Ознакомьтесь с этим обсуждением, чтобы поместить методы прототипа в свою копию. Как правильно клонировать объект JavaScript?

Наконец, я бы предостерег: если вы каким-то образом не изменяете изображения, более эффективно повторно использовать одно и то же изображение. Объекты холста должны ссылаться на одно и то же изображение.

person jollarvia    schedule 29.09.2014