SqueakByExample:11.2
morph 의 조작
morph 는 객체이기 때문에, 스몰토크에서 다른 모든 객체를 다루듯이 조작할 수 있습니다: 메시지를 보내는 것으로 morph 의 속성을 바꿀 수 있고 morph 의 서브클래스를 만드는 작업등을 할 수 있습니다. 모든 morph 는 현재 화면에 열려있지 않은 상태여도, 위치와 크기를 가지고 있습니다. 모든 morph 는 편의상, 화면에서 사각형의 영역을 가지고있는것으로 가정되고, 규칙적인 모양이 아니라고 해도, 위치와 크기의 값은 대상이되는 morph 를 둘러싸는 최소크기의 직사격형 상자가 되며, 이 상자를 morph 의 bounding box 또는 "bounds" 라고 합니다. Postion 메서드는 morph 의 상단 좌측 모서리의 위치를 기술하는 점(point)의 값을 반환합니다. morph 에 대한 좌표체계의 기준점은 화면 좌상단 구석에 있으며, 화면에서 하단으로 증가하는 경우는 y 좌표, 화면에서 우측으로 증가하는 경우는 x 좌표가 됩니다. extent 메서드도 postion 메서드처럼 point 를 반환합니다만, 위치값을 반환하는것이 아니라 morph 의 폭과 높이에 대한 값을 반환합니다.
다음 코드를 워크스페이스에 입력한 후 do it 을 실행하십시오.
joe := Morph new color: Color blue.
joe openInWorld.
bill := Morph new color: Color red .
bill openInWorld.
joe position 을 입력한 후 print it 을 실행합니다. joe 를 움직이기 위해서, joe position: (joe position + (10@3)) 을 반복적으로 실행합니다.
크기에 대해서도 같은 작업을 할 수 있습니다. joe extent 는 joe 의 크키를 반환하며, joe 의 크기를 크게 하려면, joe extent: (joe extent * 1.1) 를 실행합니다. Morph 의 색상을 변경하려면, 대상이 되는 morph 에 인자로 전달을 원하는 Color 객체와 함께 color: 메시지를 전송합니다. 예를 들면 joe color: Color orange 같은 내용이 되겠군요. 투명도를 추가하려면 joe color: (Color orange alpha: 0.5) 를 시도해보세요.
bill이 joe를 따르게 만들려면, 이 코드를 반복적으로 실행하십시오.
bill position: (joe position + (100@0))
만약 마우스를 써서 joe 를 이동시키고 이 코드를 실행한다면, bill 은 joe 의 우측 100 pixel 로 이동할겁니다.