言語ゲーム

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

Twitter: @propella

タイルモーフ改良

タイルモーフとは、etoys 上で使う様々な値、数値、真偽値、演算子などをドラッグアンドドロップで簡単に入力する為の仕組み。

問題点

  • yes / no タイルをクリックすると、どんな文字列でも入力できてしまう。
  • 数値入力のとき、大きな幅の入力(例えば10から100にする)がドラッグだけではしんどい。
  • 演算子の選択メニュー(演算子の文字の上でクリック)が出しにくい。

直したところ

  • 真偽値と代入タイルをメニュー選択式に(なんで今まで誰もやらなかったのだろう)
  • 数値入力をドラッグ可能に(MAX や macromedia 製品と同じような方式)
  • 選択肢のあらかじめ決まっている型は矢印の長押しやドラッグでも選択メニューが出るべき。

実装

TileMorph もなかなか香ばしい。。。まず、TileMorph そのものは、数値、算術演算子、数値演算子、文字列を表現/編集する事が出来る。色や音等、他の型はサブクラスを使って実装されている。タイルを生成するもっとも簡単な方法はObject >> newTileMorphRepresentative を呼び出す事だ。これで適切な型が生成される。'+' '>' 等を演算子として表現したい場合は TileMorph >> setOperator: を使う。演算子の説明は arithmeticalOperatorsAndHelpStrings 等に記録されている。レシーバが色の時 '>' が出ないようにするのはアドホック(しかもバグあり)。

  • サウンド・真偽値・演算子・代入それぞれについて
    • presentOperatorAlternatives: でメニューを出せるように。
    • ドラッグ時メニュー呼び出し。
    • mouseDown: をオーバーライドしなくて良いように(ファサードとして使う)