Macromedia Director非公式テクニカルノート ビヘイビアインスタンス間のメッセージ[上級テクニック]
Platform: All 1. ビヘイビアのインスタンスとメッセージ 2. オートタブのサンプルビヘイビア -- [オートタブビヘイビア] ビヘイビアの構造は、コメントに記述してあります。ポイントだけ、説明しましょう。まず、'on beginSprite'の第1ステートメントで、メッセージ#xCollectInstanceとともにリストをパラメータとして渡しています。前出Macromediaテクニカルノート「ビヘイビアのインスタンスとメッセージ(3)」で紹介されている複数ビヘイビア間でインスタンスを持ち合う手法です。第2ステートメントは、単にフィールドキャストメンバーを編集可能に設定しているだけです。スコア上で別途設定してあれば、必要ありません。 on xCollectInstanceハンドラでは、第1ステートメントで、渡されたリストへの参照をプロパティplInstancesに割り当てています。つぎに第2ステートメントで、リストにはスプライト番号ではなくビヘイビアインスタンス自身を格納しています。したがって、plInstancesは、インスタンスのリストとなり、インスタンスに対して直接メッセージが送れることになります。これが、このビヘイビアの第1のポイントです。 'on keyDown'ハンドラでは、押されたキーがtabキーのときにxAutoTabingを実行します。on xAutoTabingハンドラはキーボードのフォーカスを移す処理をしています。この第1ステートメントは、ユーザー定義関数xGetNextInstanceにより、つぎにフォーカスを移すフィールドスプライトのビヘイビアインスタンスを取得しています。これがこのビヘイビアのポイントの2つ目です。これはプロパティplInstancesが、インスタンスのリストを保持しているからできることです。第2ステートメントで、その取得したインスタンスに対し直接xFocusメッセージを送ります。すると、つぎにフォーカスを移すスプライトのビヘイビアインスタンスだけにxFocusメッセージが送られることになります。ですから、そのメッセージを受けたビヘイビアインスタンスのon xFocusハンドラだけが実行され、キーボードのフォーカスがそのフィールドスプライトに移るのです。 on xGetNextInstanceハンドラは、つぎにフォーカスを移すスプライトのインスタンスを、plInstancesから取り出して返します。'keyDown'メッセージを受取ったのは現在フォーカスのあるスプライトですから、そのmeパラメータで自分のインスタンスは特定できます。第1ステートメントは、リストplInstances中の自分の位置を取得しています。押されたのがtabのみでしたらリスト中のつぎ、shiftキーも押されていたらリスト中手前の位置のインスタンスが、つぎにフォーカスを移す対象になります。しかし、リストの一番最後でtabキーを押されたら1番目に、1番目でshit + tabを押されたら最後に戻る必要があります。 その準備として第2ステートメントはリスト中のインスタンスの個数を取得しています。第3ステートメントが、このハンドラ中のポイントです。通常なら'shftDown'を判定する'if...then'構文にするところを1行の式で済ませています。'shiftDown'は真か偽かにより、1か0を返します。それを式の中で利用して、つぎにフォーカスを移すインスタンスの位置を計算しています。ここは、nCurrentPosやnAmountにどういう値を入れると、どういう値が返るかを計算して確かめてみるとよいでしょう。最後のステートメントで、つぎにフォーカスを移す位置にあるインスタンスを取り出して、返しています。 最後に1点補足しておきます。on xGetNextInstanceハンドラの第2ステートメントで、毎回インスタンスの個数を数えるのは非効率に思われるかもしれません。しかし、このビヘイビアはダイナミックにフィールドのスプライト数が変わることを想定しています。したがって、途中でフィールドスプライトが減っても、正しく動作します。それは、'on endSprite'ハンドラでplInstancesから自分のインスタンスを削除しているからです。また、フィールドスプライトが加わっても、今度はその'on beginSprite'でプロパティplInstancesのインスタンスが設定し直されます。 _____ 作成者: 野中文雄 Copyright © 2001-2006 Fumio Nonaka. All rights reserved. |
|||