2014-06-28 14 views
6

Chciałbym wiedzieć, czy zagwarantuje się, że canvas.getContext("2d") zwróci to samo wystąpienie kontekstu za każdym razem, gdy zostanie wywołane.Czy canvas.getContext ("2d") zwraca za każdym razem tę samą instancję?

Powodem, dla którego chcę wiedzieć, jest to, że próbuję podążać za the advice in this answer, aby moje skalowane płótna nie wyglądały na zamglone. Ale tworzę wiele płócien w mojej grze, więc chciałbym stworzyć funkcję createCanvas, z której mogą korzystać wszyscy. Chcę, żeby wyglądać tak:

function createCanvas(x, y) { 
    canvas = $("<canvas width='" + x + "' height='" + y + "'></canvas>")[0]; 
    ctx = canvas.getContext("2d"); 
    ctx.imageSmoothingEnabled = false; //modify the context 
    return canvas; //return the canvas, not the ctx 
} 

If canvas.getContext("2d") powraca nową instancję za każdym razem, nie będzie to miało żadnego wpływu. Muszę zwrócić płótno, ponieważ używa go inny kod.

Czy istnieje lepsze rozwiązanie tego problemu? Jeśli tak, przyjmuję to i zmieniam nazwę mojego tytułu.


EDIT: Po poprosiłem zauważyłem this article mówi można dostać płótna z kontekstu wykonując ctx.canvas. Całkiem dobra wskazówka.

+2

Należy zauważyć, że 'canvas' w kodzie zwraca obiekt jquery, a nie DOM elem. Aby uzyskać wydajność, możesz równie dobrze utworzyć element canvas. – hexalys

Odpowiedz

8

Dla każdego elementu canvas, canvas.getContext("2d") zawsze zwraca kontekst jedyny i jeden dla tego elementu canvas.

Jeśli utworzysz nowy element canvas z document.createElement("canvas") (lub odpowiednikiem jquery), wówczas getContext na tym nowym płótnie zwróci unikalny kontekst dla nowego płótna.

+1

Źródło potwierdzające tę odpowiedź: * Zwróć ten sam obiekt, który został zwrócony przy ostatnim wywołaniu metody z tym samym argumentem. * [Źródło] (https://www.w3.org/TR/html5/scripting-1. html # dom-canvas-getcontext) –

Powiązane problemy