SqueakByExample:11.9
캔버스에 대한 더 자세한 내용
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