는이 세 가지 방법으로 할 수 있습니다 패턴을 녹색 대신 채우기 스타일로 사용할 수 있습니다.
context.fillStyle = pattern;
그러나 패턴은 항상 좌표 오리진 (기본값 0, 0)에서 기초로 그려 지므로 각 이동에 대해 번역해야합니다. 다행히 그렇게 많이하지 추가 코드 :
/// to move pattern where the ball is
context.translate(x, y);
context.beginPath();
/// and we can utilize that for the ball as well so we draw at 0,0
context.arc(0, 0, radius, 0, Math.PI * 2);
context.closePath();
context.fillStyle = pattern;
context.fill();
지금, 당신은 수도 있고 다시 때마다 변환하지 않아도 주위에 당신이 이동에게 공을하려는 방법에 따라 달라집니다.
Here's an online demo showing this approach.
방법 2 - 경로는 우리가 이미지를 그릴의 drawImage를 사용할 수있는 패턴 대신
패스와 볼에 맞게 이미지를 클립. 그러나 문제는 투명한 픽셀로 공의 꼭대기에 맞는 공 모양의 이미지를 만들지 않는 한 사각형을 그립니다.
님의 패턴 방법과 동일한을 달성하기 위해 클리핑 그에 사용할 수 있습니다
여기보다 몇 줄이 필요합니다 :
/// define the ball (we will use its path for clipping)
context.beginPath();
context.arc(x, y, radius, 0, Math.PI * 2);
context.closePath();
/// as we need to remove clip we need to save current satte
context.save();
/// uses current Path to clip the canvas
context.clip();
/// draw the ball which now will be clipped
context.drawImage(img, x - radius, y - radius);
/// remove clipping
context.restore();
Here's an online demo of this approach.
방법 3 - 프리 클립 이미지
로 볼 것은 포토샵이나 일부 유사한 프로그램에서 공을 확인하고 당신이 다음 채울 호를 그리는 대신 이미지로이를 그립니다. 성능이 중요한 경우
drawImage(ballImage, x - radius, y - radius, radius, radius);
:
당신은 단순히 아크와 경로를 만드는 공을 대신 그려
: 당신이 다른 크기로 그려해야하는 경우
drawImage(ballImage, x - radius, y -radius);
단순히 호출을 확장 이 방법이 다른 두 가지 방법보다 성능이 뛰어나지 만 유연하지는 않습니다.
유연성과 성능 사이의 균형이 필요한 경우 클리핑 방식이 최적의 것으로 나타납니다 (브라우저마다 다를 수 있으므로 테스트).
Here's an online demo with drawImage
켄 - 와우! 늦은 답변에 대해 유감이지만 대답은 무엇입니까! 고맙습니다. 나는 이것들 중 하나를 작동 시키려고 노력할 것입니다. –
@CheesePuffs 대답이 유용/해결 된 경우 업 - 투표/수락하는 것을 잊지 마십시오 :-) – K3N
Ken - 그랬습니다! 이것은 완벽하게 작동했습니다. 이제 나는 내 이미지를 가지고있다. 이제는 이미지를 회전하는 방법을 알아 내고 끝났습니다. :) –