視点を切り替え、幾つ立方体があるかを当てるムービーを作ってみよう。このとき視点の切り替えと答えの選択をポップアップメニューで行うことにする。
ポップアップメニューの大まかな流れを示すと次のようになる。
- 現在選択されている項目が1行表示されている
- 右側にポップアップメニューであることを示す"▼"が表示されている
- クリックするとメニューが伸び、選択可能な項目が表示される
- 現在選択されている項目には印がついている
- 画面外に出ないように調整
- マウスボタンを押したままメニュー上にカーソルを移動させる
- カーソルの下の項目がhiliteされる
- カーソルをメニューの外に移動するとhiliteが消える
- 選択したい項目上でマウスボタンを離す
- メニューが1行になり、"▼"が表示される
- その項目に割り当てられた処理が行われる
フィールドを用意し、それにビヘイビア(スコアスクリプト)を割り当てることで、ポップアップメニューを作る。このビヘイビアを補佐するハンドラをムービースクリプトに置く。
視点を切り替えるポップアップメニューを先に挙げた順番で追ってみよう。
- 現在選択されている項目が1行表示されている
beginSprite
- メニューの状態を示す変数として menuSt を用意し、ここで初期化
- メニューの内容を menuContents に納める
- 最初に表示すべき内容をセット
- 現在選択されている行が、何行目かを selNum に納める
- その他に必要なプロパティ変数を初期化
ビヘイビアの中で [property] を使って、プロパティ変数として宣言すると、同じビヘイビア内で自由にアクセスできるばかりでなく、外部からアクセスすることもできる。spriteNum をプロパティ宣言しておくと、そのビヘイビアが割り当てられているスプライトの番号を得ることができるので便利。
- クリックするとメニューが伸び、選択可能な項目が表示される
on mouseUp
on prepareFrame
menuSt = 1 なので
- メニューの座標を変更し、menuContents の内容をフィールドに流し込む
- selNum 行の1文字目を "・" マークに変える
- menuSt を 2 にする
- マウスボタンを押したままメニュー上にカーソルを移動させる
on mouseWithIn
- mLineOld と the mouseLine(カーソルが重なっている行)が異なるとき、その行をhiliteする
- the mouseLineを mLinOld に記憶
- the mouseLine は カーソルが枠線上にあるとき、-1 を返すので注意
on mousLeave
- 実際にない行をhiliteして、結果的にhiliteを消す
- 選択したい項目上でマウスボタンを離す
on mouseUp
- そのときの the mouseLine を selNum に入れる
- menuSt を 3 にする
on prepareFrame
menuSt = 3 なので
- menuContents の selNum 行をフィールドに入れ、メニューを1行に戻す
- ムービースクリプトに書かれた action を実行する
on mouseLeave
- メニューの外でマウスボタンが離されると menuSt が 4 になり、prepareFrame でメニューが1行に戻る
|