言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

Tweak 虫眼鏡

Tweak の虫眼鏡を作っている。Etoys の新しいバージョンとして着々と開発が進められている Tweak にも、まだまだ足りない部分があって、マイナーな部品だが虫眼鏡もその一つ。さくっと一日もあれば出来るかなと思っていたけど、Tweak の新しいアイデアと付き合わなくてはいけないので時間がかかってしまう。ポイントだけ書きます。

表示オブジェクトには、プレイヤとコスチュームという概念がある。これは、単なる役割であってクラスの階層構造とは関係ない。ある機能を持ったオブジェクトを設計する時、オブジェクトの状態を表すプレイヤと、見かけを現すコスチュームを定義する。簡単なオブジェクトの場合は CPrimitiveCostume という一般的なコスチュームを使っても良い。Morphic に親しんだ人なら、Morphic における Morph と Player が裏返った世界と考えれば良いかも。プログラマはコスチュームよりも、むしろプレイヤを中心に考える。

イベント伝播の仕組みは id:propella:20050210 に書いたとおり。時間が来ると強制的に画面が書き換わるようなやつは と self invalidate を使う。

現在のカーソル位置を知るには、ダサい事だが self root primaryHand position を使う。単なる hand では、何故か Morph ワールドから見た座標になってしまう。同じく画面の画像を得るには Display の変わりに self root display が使える。

新しいタイルを定義するには CTileDefinition>>defaultViewerSpec を再定義。xml で書く。一つのメソッドをみんなで書き換えるのはださいのできっと変更されるだろう。

虫眼鏡は出来たが、これを丸くするのに困っている。Morphic の世界では、ScreeningMorph というマスクを表すモーフを活用していた。これと同じように、マスクの要素になったら丸く切り取るという方法にするか、もしくは折角コスチュームがあるんだから、マスクを表現できるコスチュームを作成するべきか。。。