SqueakByExample:11.9: Difference between revisions
Onionmixer (talk | contribs) (SBE 캔버스에관한좀더많은내용 페이지 추가) |
Onionmixer (talk | contribs) (번역수정) |
||
(5 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== | ==캔버스에 대한 더 자세한 내용== | ||
drawOn: | drawOn: 메서드는 인자를 한가지만 취급하며, 이 인자로서 요구되는것은 Canvas 클래스의 인스턴스입니다; 여기서 Canvas 란 morph 자신을 draw 하는 영역을 의미합니다. Canvas 의 graphics 메서드를 사용하면, 사용자의 morph 에 자유로운 다양한 모양을 부여할 수 있습니다. Canvas 클래스의 계층구조를 살펴보면, 이런 변형된 클래스를 얼마든지 찾을 수 있습니다. 일반적으로 사용되는 Canvas 클래스의 변형은 FormCanvas 클래스입니다; Canvas 클래스와 FormCanvas 클래스에서 변형에 사용할 중요한 메서드중 대부분을 찾아낼 수 있습니다. 이러한 메서드에는 points, lines, polygons, rectangles, ellipses, text, 그리고 images 등의 그리기와, rotate, scaling 등이 있습니다. | ||
투명한 | 투명한 morph 또는, 그 외의 그리기 메서드, antialiasing 등을 사용하기 위해서, 다른 종류의 canvas 도 사용할 수 있습니다. 이런것들을 사용해보고 싶다면 AlphaBelndingCanvas 클래스나 BalloonCanvas 클래스등이 필요할겁니다. 하지만 drawOn: 메서드의 인수로서 FormCanvas 의 인스턴스를 받는경우, drawOn: 메서드의 안쪽에서는 어떤 처리를 해야할까요? 다행히도, 어느 canvas 라고해도 다른종류의 canvas 로 변환은 가능합니다. | ||
{{CommentSqueak|{{Template:HighlightBold|DieMorph}} 에서 0.5 값의 투명도<sup>alpha-transparency</sup>로 canvas 를 사용하려면, 다음과 같이 {{Template:HighlightBold|drawOn:}} 을 재정의 하시기 바랍니다.}} | |||
메서드 11.37: 반투명한 주사위 그리기 | |||
<syntaxhighlight lang="smalltalk"> | <syntaxhighlight lang="smalltalk"> | ||
DieMorph>>drawOn: aCanvas | |||
| theCanvas | | | theCanvas | | ||
theCanvas := aCanvas asAlphaBlendingCanvas: 0.5. | theCanvas := aCanvas asAlphaBlendingCanvas: 0.5. | ||
Line 19: | Line 21: | ||
알아야할건 전부 설명한듯 하군요. | |||
[[image:multiMorphs.png|none|110px|thumb|그림 11.9: 알파 투명도로 표시한 주사위]] | |||
만약 궁금증이 생긴다면, asAlphaBlendingCanvas: 메서드를 살펴보시기 바랍니다. 메서드 11.38 에서는, 주사위의 그리기 메서드에서 BallonCanvas 와 antialiasing 을 사용하는 방법을 알수 있습니다. | |||
메서드 11.38: AntiAliasing 효과를 준 주사위 그리기 | |||
<syntaxhighlight lang="smalltalk"> | <syntaxhighlight lang="smalltalk"> | ||
DieMorph>>drawOn: aCanvas | |||
| theCanvas | | | theCanvas | | ||
theCanvas := aCanvas asBalloonCanvas aaLevel: 3. | theCanvas := aCanvas asBalloonCanvas aaLevel: 3. | ||
Line 36: | Line 40: | ||
do: [:aPoint | self drawDotOn: theCanvas at: aPoint] | do: [:aPoint | self drawDotOn: theCanvas at: aPoint] | ||
DieMorph>>drawDotOn: aCanvas at: aPoint | |||
aCanvas | aCanvas | ||
drawOval: (Rectangle | drawOval: (Rectangle | ||
Line 45: | Line 49: | ||
borderColor: Color transparent | borderColor: Color transparent | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==Notes== | ==Notes== |
Latest revision as of 10:13, 16 September 2013
캔버스에 대한 더 자세한 내용
drawOn: 메서드는 인자를 한가지만 취급하며, 이 인자로서 요구되는것은 Canvas 클래스의 인스턴스입니다; 여기서 Canvas 란 morph 자신을 draw 하는 영역을 의미합니다. Canvas 의 graphics 메서드를 사용하면, 사용자의 morph 에 자유로운 다양한 모양을 부여할 수 있습니다. Canvas 클래스의 계층구조를 살펴보면, 이런 변형된 클래스를 얼마든지 찾을 수 있습니다. 일반적으로 사용되는 Canvas 클래스의 변형은 FormCanvas 클래스입니다; Canvas 클래스와 FormCanvas 클래스에서 변형에 사용할 중요한 메서드중 대부분을 찾아낼 수 있습니다. 이러한 메서드에는 points, lines, polygons, rectangles, ellipses, text, 그리고 images 등의 그리기와, rotate, scaling 등이 있습니다.
투명한 morph 또는, 그 외의 그리기 메서드, antialiasing 등을 사용하기 위해서, 다른 종류의 canvas 도 사용할 수 있습니다. 이런것들을 사용해보고 싶다면 AlphaBelndingCanvas 클래스나 BalloonCanvas 클래스등이 필요할겁니다. 하지만 drawOn: 메서드의 인수로서 FormCanvas 의 인스턴스를 받는경우, drawOn: 메서드의 안쪽에서는 어떤 처리를 해야할까요? 다행히도, 어느 canvas 라고해도 다른종류의 canvas 로 변환은 가능합니다.
DieMorph 에서 0.5 값의 투명도alpha-transparency로 canvas 를 사용하려면, 다음과 같이 drawOn: 을 재정의 하시기 바랍니다.
메서드 11.37: 반투명한 주사위 그리기
DieMorph>>drawOn: aCanvas
| theCanvas |
theCanvas := aCanvas asAlphaBlendingCanvas: 0.5.
super drawOn: theCanvas.
(self perform: ('face' , dieValue asString) asSymbol)
do: [:aPoint | self drawDotOn: theCanvas at: aPoint]
알아야할건 전부 설명한듯 하군요.
만약 궁금증이 생긴다면, asAlphaBlendingCanvas: 메서드를 살펴보시기 바랍니다. 메서드 11.38 에서는, 주사위의 그리기 메서드에서 BallonCanvas 와 antialiasing 을 사용하는 방법을 알수 있습니다.
메서드 11.38: AntiAliasing 효과를 준 주사위 그리기
DieMorph>>drawOn: aCanvas
| theCanvas |
theCanvas := aCanvas asBalloonCanvas aaLevel: 3.
super drawOn: aCanvas.
(self perform: ('face' , dieValue asString) asSymbol)
do: [:aPoint | self drawDotOn: theCanvas at: aPoint]
DieMorph>>drawDotOn: aCanvas at: aPoint
aCanvas
drawOval: (Rectangle
center: self position + (self extent * aPoint)
extent: self extent / 6)
color: Color black
borderWidth: 0
borderColor: Color transparent