- ベストアンサー
FLASH8でActionscriptが動かない!どうすればいい?
- FLASH8のActionscriptを使って簡単なイベント処理を実行したいのですが、うまくいかず困っています。
- FLASH CS3の参考書を見て、記述したのですが8とCS3では記述方法に違いなどあるのでしょうか?
- conts1_btnというインスタンス名を付けたボタンをクリックしたら、Contents1というラベルを付けたフレームに飛ぶという処理です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Flash や ActionScript でできることは、書き出す Flash Player のバージョン、そして ActionScript のバージョンによって大きく変わります。 Flash 8 では、Flash Player 8 まで、ActionScript は 1.0 と 2.0 を扱えます。 (他に携帯電話用の Flash Lite という規格も扱えますが、今回は触れません) Flash 8 の次の世代である CS3 からは、ActionScript は 3.0 という新しい規格が搭載されるようになりました。 CS3 でも 従来の 1.0 と 2.0 は使えるのですが、CS3 の解説書は 3.0 を取り上げている場合がほとんどです。 ActionScript 3.0 はスクリプトの仕様自体が大幅に変更されたため、3.0 のスクリプトの多くは 2.0 や 1.0 の環境では使えません。 先述の通り、Flash は Flash Player と ActionScript のバージョンによってできることが異なり、スクリプトの書き方も違います。 ここでは、Flash Player 6 以降、ActionScript 2.0 を中心に扱います。 まず、書き出す Flash Player と ActionScript のバージョンを設定してください。 「パブリッシュ設定」(「ファイル」メニュー→「パブリッシュ設定」)の、” Flash ”のタブで設定します。 「バージョン:」の項目で” Flash Player 6 ”~” Flash Player 8 ”のいずれかを、「 ActionScriptのバージョン:」の項目で” ActionScript 2.0 ”を選択してください。 今回は、Flash Player のバージョンは6~8のどれでも構いませんが、6では問題が起こる場合もありますので、ActionScript 2.0 を使う時は7か8が無難です。 以上で、パブリッシュ関連の設定は完了です。 スクリプトの一例です。 ステージに、ボタンシンボルのインスタンス” conts1_btn ”があるものとします。 このスクリプトは、メインのタイムラインのフレームに記述してください。 (↓ 以下のスクリプトは、各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください) //*** //タイムラインを止めておく stop(); //ボタンがクリックされた時の処理 conts1_btn.onRelease = function():Void { //フレームラベル”Contents1”に移動 gotoAndPlay( "Contents1" ); }; //*** - - - - - ActionScript は”イベント駆動型”という発想を採用しています。 これは、ボタンがクリックされた・マウスが動かされた・・・など、ムービーの再生中に起こる様々な出来事(イベント)を監視するプログラムが裏方で動いており、指定したイベントが発生した時に行う処理をあらかじめ定義しておくと、その裏方のプログラムが自動的に処理をしてくれる仕組みのことです。 この、「イベントが発生した時に行う処理をあらかじめ定義しておく」ことが、ActionScript の基本です。 その定義の方法が、3.0 と 2.0 / 1.0 とでは違います。 3.0 ではご参考になさった参考書にもある通り、イベントが発生した時に行う処理を関数として用意し、addEventListener という命令を使って登録します。 2.0 の onRelease = function という書き方は 3.0 の仕様の前身のようなもので、「クリックされた時」を意味する onRelease (イベントハンドラといいます)に、イベントが発生した時に実行する関数を登録します。 今回は、関数を作る function という命令で名前のない関数をその場で作り、onRelease に登録しましたが、名前のある関数を作っておいて //*** //フレームを移動する関数 function go_conts1():Void { //フレームラベル”Contents1”に移動 gotoAndPlay( "Contents1" ); } //イベントハンドラに登録 conts1_btn.onRelease = go_conts1; //*** ↑ このように書くこともできます。 ActionScript 3.0 と 2.0 では書き方は違いますけれど、「クリックされた時に、この関数を呼び出す」と指定している点では同じです。 なお、ActionScript 2.0 までは、ボタンやムービークリップのインスタンスに直接スクリプトを記述することもできます。 ステージ上のボタンのインスタンスを選択し、「▼アクション-ボタン」と表示されていることを確認して、次のスクリプトを記述してみてください。 (こちらを有効にする場合は、フレームに書いたスクリプトは conts1_btn.onRelease = function():Void 以降を削除するか、コメントにして無効にしてください) //*** on(release) { //フレームラベル”Contents1”に移動 gotoAndPlay( "Contents1" ); } //*** ↑ ステージ上にあるインスタンスに直接スクリプトを書く場合は、on または onClipEvent というアクションでスクリプト全体を囲む約束になっています。 この書き方は、どの対象で何のイベントが起きた時にどんな処理をするのかが分かりやすく、手軽に利用できる利点はあるものの、スクリプトがあちこちに分散して管理しにくくなるなどの難点もあるため、3.0 では廃止されてしまいました。 旧式の書き方ですので、あまり使わない方がいいかもしれません。
お礼
DPE様 こんばんは。回答ありがとうございます! 丁寧に説明していただき感謝しています。記述いただいた通りにすれば正常に動きました。 ActionScript 3.0 と 2.0 では色々違いがあるのですね。とても勉強になりました。 ありがとうございました^^