2011-08-25 15 views
19

Próbuję narysować wiele łuków koła wypełnione różnymi koloramiRysunek różne kolorowe kształty w ścieżce (HTML5 Canvas/JavaScript)

 //-------------- draw 
     ctx.beginPath(); 
     ctx.fillStyle = "black"; 
     ctx.arc(30, 30, 20, 0, Math.PI*2, true); 
     ctx.fill(); 
     ctx.fillStyle = "red"; 
     ctx.arc(100, 100, 40, 0, Math.PI*2, true); 
     ctx.fill(); 
     ctx.closePath(); 

ta produkuje oba łuki wypełnionym czerwonym, i mogę powiedzieć, że wokół mniejszego jest słaby czarny kontur.

enter image description here

Czy ktoś może rzucić nieco światła na to w jaki sposób można to osiągnąć? co robię źle?

+0

Kiedy zamykasz ścieżkę, uważam, że rysuje ona obie (czarna pod czerwonym, dla mniejszych okrąg). – alex

+0

Dobre pytanie, właśnie się nad tym zastanawiałem, a twoje pytania i odpowiedzi pomogły mi. Dzięki! – Emanegux

Odpowiedz

35

Zamknij ścieżkę, a następnie otwórz ją ponownie.

ctx.closePath(); 
ctx.beginPath(); 

jsFiddle.

... pomiędzy kodem do rysowania łuku.

+1

'closePath' nie kończy deklaracji ścieżki, to tylko' moveTo (firstDeclaredCoordinates) '. – Kaiido

-2

Ścieżka rozpoczyna się i kończy beginPath endPath. Każda rzecz pomiędzy jest tą samą ścieżką. Możesz nawet narysować ścieżki z dziurami za pomocą reguł skrzydeł. Narysuj coś w jednym kierunku i coś innego w przeciwnym kierunku, ale w pierwszej kolejności. Narysujmy prostokąt z otworem w środku za pomocą linii. beginPath(); moveTo (10,10); lineTo (100,10); lineTo ((100,60) lineTo (10,60) lineTo (10,10) closePath(); moveTo (20,20) lineTo (20,50) lineTo (90 , 50); lineTo (90,20); lineTo (20,20); closePath(); endPath(); fill();

można to zrobić z dowolnego kształtu Spróbuj łuk. w jednym kierunku, a następnie w przeciwnym kierunku, używając mniejszego promienia

+2

'endPath'nie istnieje w interfejsie canvas2D API, a' closePath' nie kończy deklaracji ścieżki, to po prostu 'moveTo (firstDeclaredCoordinates)'. – Kaiido

+0

Moja zła, usuń ścieżkę końcową. beginPath(); moveTo (10,10); lineTo (100,10); lineTo ((100,60), lineTo (10,60), lineTo (10,10), closePath(); moveTo (20,20), lineTo (20,50), lineTo (90,50), lineTo (90 , 20); lineTo (20,20); closePath(); fill(); – neticous

+0

Jednak widziałem przecieki w niektórych przeglądarkach, gdy metoda closePath nie była używana. – neticous

Powiązane problemy