Masz 2 opcje do rysowania otworów z płótna HTML5.
Wybór 1: Narysuj kształt zewnętrzny i kształt wewnętrzny w różnych kierunkach.
Kształt zewnętrzny zgodny z ruchem wskazówek zegara i wewnętrzny.
Lub zewnętrzny kształt zgodnie z ruchem wskazówek zegara i wewnętrzny przeciwnie do ruchu wskazówek zegara.
ctx.beginPath();
//outer shape, clockwise
ctx.moveTo(100,20);
ctx.lineTo(200,200);
ctx.lineTo(20,200);
ctx.closePath();
//inner shape (hole), counter-clockwise
ctx.moveTo(100,100);
ctx.lineTo(70,170);
ctx.lineTo(140,170);
ctx.closePath();
//fill
ctx.fillStyle = "#FF0000";
ctx.fill();
To trochę bólu, aby wykryć kierunek rysowania kształtu, kiedy kodujemy.
Jeśli trzeba wykryć, czy seria kropek jest w prawo, czy nie, tutaj jest dobrym funkcja:
function isClockwise(dots){
var sum = 0;
for(var i=1, n=dots.length; i<n; i++){
sum += (dots[i][0] - dots[i-1][0]) * (dots[i][1] + dots[i-1][1]);
}
sum += (dots[0][0] - dots[n-1][0]) * (dots[0][1] + dots[n-1][1]);
return sum < 0;
}
console.log(isClockwise([[100,20], [200,200], [20,200]])); //true
console.log(isClockwise([[100,20], [20,200], [200,200]])); //false
Jeśli kropki jest do ruchu wskazówek zegara, ale trzeba w lewo, .reverse() twoje kropki szyk.
var dots = [[100,20], [200,200], [20,200]];
dots.reverse();
Wybór 2:
Użyj 'evenodd' wypełnić regułę, rysować swoje kształty w dowolnym kierunku.
Ten sposób jest o wiele prostsze niż wybór 1.
zobaczyć fill() method API:
void ctx.fill();
void ctx.fill(fillRule);
void ctx.fill(path, fillRule);
fillRule może być "niezerowe" lub "evenodd"
"niezerowe": Niezasychające zasada zerowania uzwojenia, która jest regułą domyślną.
"evenodd": reguła "parzyste".
Dlaczego nie chcesz zrobić pączek ? Pączki są świetne! odsyłamy do tego linku, aby narysować kształty: https://developer.mozilla.org/en-US/docs/Canvas_tutorial/Drawing_shapes – jazzytomato
Zgadzam się z tym, że pączki warte są remisu. Ten link: http://www.w3schools.com/tags/ref_canvas.asp też może być przydatny. – GameAlchemist
Dla jasności rysuję skomplikowany wielokąt z setkami punktów. Pączek to tylko analogia do dziury w środku wielokąta. – Nick