2011-10-29 6 views
4

저는 한동안 html5 캔버스 요소를 고쳤습니다. 그것은 매우 유용하고 모든 것이지만, 사실상 캔버스를 객체로 구성 할 수 없다는 사실에 매우 제한되어 있습니다.HTML5 Canvas : 도형에서 객체로 이동 하시겠습니까?

예를 들어 사각형이나 다른 모양을 그리면 스크립트의 다른 속성에 액세스 할 수 있다는 것이 유용 할 것입니다. 그 대신에, 그들은 단지 남아 있습니다, 글쎄, 드로잉, 당신은 수작업으로 캔버스에있는 것을 추적하고, 그것을 지우고, 아무것도 바꾸고 싶을 때 그것을 다시 써야합니다.

제 질문은 : 뭔가 빠졌습니까? JavaScript는 캔버스 내부의 객체를 처리 할 수있는 방법을 제공합니까? 그렇지 않다면 이미 그렇게하는 라이브러리가 있습니까? 어느 쪽이 최고라고하니?

+1

바로 그 이유는 [fabric.js] (http://kangax.github.com/fabric.js/demos/) 라이브러리를 구축하여 캔버스에 편리한 객체 모델을 제공하기 위해서입니다. 그것을보십시오; 나는 그것이 도움이되기를 바랍니다. – kangax

+0

나는 즉시, – Cystack

답변

3

캔버스는 다른 드로잉 도구와 전혀 다르지 않습니다. 당신은 실제로 을 가지고 있습니다. 당신이 그리는 것을 추적 할 수 있습니다. 트릭은 어떻게하는지입니다. 실제로 객체를 사용하는 것은 꽤 좋은 생각이며, 그리 어렵지 않습니다. 캔버스의 context을 캔버스와 상호 작용하여 그 위에 그릴 수 있도록 모든 오브젝트에 캔버스를 전달하면됩니다. 그래서 Foo라는 객체가 있다면 객체가 어떻게 그려지기를 원하는지 결정할 수 있습니다. 예를 들어 그렇게 같은 방법을 할 수 :

function Foo() { 
    this.draw = function(context) { 
    context.restore(); 
    context.fillStyle = "rgb(200,0,0)"; 
    context.fillRect (10, 10, 55, 50); 
    context.save(); 
    // And so on... 
    } 

를 메인 그리기 루프에서이 유사한 코드를 할 수 : 이것은 도면의 자신의 방법으로 개체를 만들 수있는 것이다

// ... Various init - remember to set the context and store the Foo object somewhere 
foo.draw(context); 
// ... 

. 물론 그것을 할 수있는 몇 가지 방법이 있지만,이 모듈의 장점은 꽤 모듈화 된 것입니다. 원한다면 같은 멋진 유형의 도구에서 상속받은 몇 가지 유형의 객체를 가질 수 있습니다. 희망이 있습니다!

P.S. : 전체 HTML 5/캔버스 내용에 대한 훌륭한 튜토리얼을 기억했습니다 : It's on MDN here.

+0

예, 많은 도움이됩니다. 기본적으로 캔버스에서 객체로 이동하는 것이 좋습니다. 다른 방법으로는 소리가 나지 않지만 강력한 기능은 아닙니다. 쉽게 모양. 어쨌든, 당신의 솔루션은 매우 모듈화되어 있습니다. 추신 : 이것은 제가 사용해온 튜토리얼입니다.이 글을 읽으면 나를 데려온 단점을 깨닫게되었습니다. : – Cystack

+0

Heh darn. 나는 튜토리얼이 도움이되기를 바랐다.하지만 그렇다. 나는 JavaScript 전문가가 아니라는 것을 인정해야한다. 그러나 나는이 방법이 많은 멋진 프로젝트에서 사용되는 것을 보았다. 다른 방법으로는 - 내가 맞다면 - 캔버스 객체에 약간의 어지럼 울을 요구할 것입니다. 그게 유익 할 지 확신 할 수는 없지만, 다시 정확한 구현을 살펴 보지 않았습니다. –