第1回ではモーフを生成する方法について学んだ。今回はモーフの属性の取得や変更について学ぶ。
Playgroundで以下を入力し緑色のボタンを押すと画面の左上に青色のモーフが現れる。
Morph new openInWorld.
モーフの属性を取得したり変更するために、モーフに対してメッセージを送る。
モーフの大きさを取得したい場合には、extentメッセージを送る。Playgroundの右下のペインにselfとだけ表示されている。ここで以下のように入力する。
self extent.
入力したところで、Command-P(Alt-P)を押すと、以下のように表示される。
画面上に 50@40 と表示されているのが見える。これは、モーフの幅が50ピクセル、高さが40ピクセルであることを示している。
Smalltalkでは、歴史的にx@yの形式でXY座標値を表す。しかし、2個の成分を持ったベクトルデータは様々な使い道があり、特に成分が数値の場合には座標値を別の用途に用いることが多い。そのためモーフの幅と高さといったデータも座標値として表されている。
ちなみに、50@40から50を取り出したい場合には座標値にxというメッセージを送る。次のコードを見てみよう。
(50@40) x.
入力できそうなところならどこでも構わない(起動時に開かれる説明画面でもよい)ので上の2行を入力したあと選択し、Command-P(Alt-P)を押すと50という値が表示される。40を取り出すには、xの代わりにyというメッセージを送る。
Playgroundで入力した式を使ってモーフの幅だけを取得したいなら以下のように書けばよいが、後述するようにそのための特別なメッセージも用意されている。
self extent x.
モーフの大きさを設定したい場合には、extent:メッセージを送る。extent:はキーワードメッセージと呼ばれるもので、座標値で表した大きさを引数としてメッセージを送ればモーフの大きさを変えることができる。
Playgroundの右下のペインで入力したものを以下のように変える。
self extent: 100@100.
入力後にCommand-D(Alt-D)を押すと、モーフの大きさが変わる。
幅や高さを個別に取得したり指定したい場合は、それぞれ以下のようなメッセージを送ればよい。
- width
- 幅の取得
- width: 数値
- 幅の設定
- height
- 高さの取得
- height: 数値
- 高さの設定
キーワードメッセージの場合は、対応する値とともにメッセージを送る。
なお、Morphicではモーフの幅や高さを個別に管理しているわけではない。モーフの大きさは次回説明する位置情報とともに一括して管理されている。
(第2回おわり)