SqueakByExample:11.9

From 흡혈양파의 번역工房
Jump to navigation Jump to search

캔버스에 대한 더 자세한 내용

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 로 변환은 가능합니다.


Squeak comment.pngDieMorph 에서 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]


알아야할건 전부 설명한듯 하군요.

그림 11.9: 알파 투명도로 표시한 주사위


만약 궁금증이 생긴다면, 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


Notes