2014-09-29 2 views
0

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

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 - глобальное имя объекта Image).

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

+0

[drawImage поддерживает только собственные объекты.] (Http://stackoverflow.com/questions/14934033/draw-preloaded-image-into-canvas). – OrionMelt

ответ

0

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

this[property] = img[property] 

Кроме того, я думаю, что ваша копия мельче, чем вам нужно. Просмотрите эту дискуссию, чтобы поместить прототипы в свою копию. How do I correctly clone a JavaScript object?

В заключение я бы предупредил, что, если вы каким-либо образом не изменяете изображения, более эффективно использовать одно и то же изображение. Пусть объекты холста ссылаются на одно и то же изображение.

+0

Да, я имел в виду img, вот что в моем коде. –

Смежные вопросы