Flash ムービー内での Lingo : go to 記述の注意点
Flash ムービー内で直接 Lingo 記述をすることができますが、この際、いくつかのコマンドについては注意をする必要があります。
go to コマンドなど移動のLINGOを書く場合、その go to の行き先のフレームには この Flash キャストが存在している必要があります。もし存在しない場合にはエラー等が発生し、フリーズ等の症状が起こります。これはgo to先のフレームに自分自身(Flash キャスト)がいない場合に、この現象が起こります。逆に言うと、ずっと同じ Flash キャストがフレーム内に存在するようなムービーでは問題無く使うことができます。
Flashがメッセージを送ると、そのコールバックを受け取る必要があります。ところが、フレームを移動してそのFlashスプライトが存在しなくなってしまうと、コールバックを受け取れないため、一般保護違反などのエラーになることがあります。
この問題を回避しつつFlashからのメッセージでフレーム移動を行うには、一旦移動準備のフラグを立てることのみでとりあえず処理を終えておきます。そして、別のタイミングでフラグを判別し、フレームの移動を行うようにします。
以下に、ビヘイビアで処理する場合の参考例をご紹介します。
■Flash側
On (Release)
Get URL ("event: xGoTo "NextScene"")
End On
■Director側
-- [メッセージを受けて指定されたマーカーに移動するビヘイビア]
property psWhereToGo -- 移動先マーカー名を格納するプロパティ
property pbDone -- Flashからメッセージを受取ったことを確認するプロパティ
on xGoTo me, sWhereToGo
set psWhereToGo = sWhereToGo -- Flashから渡されたパラメータを移動先マーカー名としてプロパティに格納
set pbDone = true -- Flashからメッセージを受取ったことを意味する'true'をプロパティに設定
end
on exitFrame me
if pbDone then -- Flashからメッセージを受取ったことを確認
set pbDone = false -- メッセージ受け取り後の処理が行われるのでプロパティを'false'に設定
go psWhereToGo -- 移動の実行
end if
end
ビヘイビアについて簡単に解説します。使用されているコマンド・キーワード等について、詳しくはDirecorオンラインヘルプをご参照くだい。
Flashからメッセージ'xGoTo'と移動先マーカー名となるパラメータ"NextScene"を送ると、Flashスプライトに設定したビヘイビアの'on xGoTo'ハンドラがそれを受取ります。
'on xGoTo'ハンドラの第1ステートメントでは、移動先マーカー名をプロパティpsWhereToGoに格納します。プロパティ変数はビヘイビアの冒頭で'property'定義しておく必要があります。定義されたプロパティ変数は、そのビヘイビアの中であれば他のハンドラからも参照できます。
第2ステートメントは、Flashからメッセージを受取ったことを意味する'true'をプロパティpbDoneに設定します。このプロパティを'on exitFrame'ハンドラで確認して、マーカー移動の処理を行うことになります。
'on xGoTo'ハンドラが終了したので、Flashはコールバックを受取ります。この時点では、まだフレームを移動していません。これがこのビヘイビアのポイントです。
'on exitFrame'ハンドラの第1ステートメントは、Flashからメッセージを受取ったかどうかをプロパティpbDoneの値で判定します。pbDoneはとくに初期値を与えていないので、初めは'void'です。Flashからのメッセージを受けて'on xGoTo'ハンドラが実行されると、'true'に設定されます。このとき第2ステートメント以降が実行されます。
第2ステートメントでは、プロパティpbDoneの値を'false'に設定し直します。これにより、今後'on exitFrame'ハンドラが呼ばれても、以降のステートメントは実行されなくなります。
第3ステートメントで、指定されたマーカーに移動します。これで、ビヘイビアの処理はすべて完了します。