0

私はアクション スクリプト 3 の初心者なので、この詳細な投稿をお許しください。(およびコード投稿エラー)

インタラクティブなフラッシュ プロジェクトを作成しています...17 個の個別のシーンがあります...

  • イントロシーン
  • 「メイン_シーケンス」
  • 15 の個別のタイトル ソング ページ

イントロ->「メイン」シーケンスを問題なくスクリプト化しました....

私の問題は、「メインシーケンス」に15個のボタンがあり、それらを15個の個別のシーンにリンクする必要があることです...2つの異なるコードセットを試しましたが(下記参照)、コンパイルエラーが発生し続けました... ..これらの2つの形式のどちらが私の目的に最適であるか、正確に何が間違っているのかを教えていただければ幸いです....

コード 1:これは、個々のページをメイン シーケンスにリンクするために使用しているものを変更したものです。

TD_g.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler1);
function mouseDownHandler1(event:MouseEvent):void {

gotoAndStop(1,"Tweedlee_Dee");
}
  s_g.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler2);
function mouseDownHandler2(event:MouseEvent):void {

gotoAndStop(1,"Sincerely");
}
      ats_g.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler3);
  function mouseDownHandler3(event:MouseEvent):void {

gotoAndStop(1,"Ain’_that_a_shame");

...15回繰り返しました...その 部分は、メインシーケンスの各ボタンに割り当て_gた一意のインスタンス名を参照しています...どこかで各イベントが異なる必要があることを読んだので#、それぞれを変更しました(?) MouseDownHandlr..シーンをテストするたびに、次の結果が得られます...

TypeError: エラー #1009: null オブジェクト参照のプロパティまたはメソッドにアクセスできません。at music_Sheet_project_14_Main_Sequence_fla::MainTimeline/frame1( ...そして、シーンが開始され、そのアニメーションに続いてマウスオーバー効果が行われますが、クリックするとエラー(?)を返すボタンは「反応」を生成しません

...映画をテストするたびに(その短いコードだけで!)、次の結果が得られます...

14 コンパイラ エラー

すべて 1021: 関数定義が重複しています。ソース :function mouseDownHandler(event:MouseEvent):void {

..だから私は別のルートを試しました...

**Code2 **これは、最初のコードを修正しようとしたときに見つけた別のコードです。

stop();
TD_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
s_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ats_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
iyk_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
hms_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
tf_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
hd_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ld_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ll_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ts_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ipsy_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ysm_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ihm_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
iss_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
tl_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
function mouseDownHandler(event:MouseEvent):void
{
var nameOfButton:String = event.currentTarget.name;
if (nameOfButton == "TD_g")
{
 gotoAndStop(1, "Tweedlee_Dee");
}
 else if (nameOfButton=="s_g")
{
gotoAndStop(1, "Sincerely");
}
else if (nameOfButton=="ats_g")
{
gotoAndStop(1, "Ain’_that_a_shame");
}
else if (nameOfButton=="iyk_g")
{
 gotoAndStop(1, "I_hear_you_knocking");
}

...これは 64 行目を含めてあと 15 回続きます。

{
else if (nameOfButton=="ysm_g");
{
 gotoAndStop(1, "You_shook_me");

これを実行しようとすると、次のようになります...

「1083: 構文エラー: else は予期しないものです。ソースelse if (nameOfButton=="ysm_g");

これを調べると、構文が間違っているという提案が表示されます...しかし、他のすべての行ではなく、なぜこの行が選択されるのでしょうか...再入力して再フォーマットしようとしましたが、そのエラーが発生し続けます...

*これらのコードのうち、使用するのに最適なものはどれですか? (そして、なぜ機能しないのですか???) あらゆる/すべてのアドバイスとヘルプをいただければ幸いです...ありがとう!!! *

4

2 に答える 2

0

オブジェクトをトリガーしたいシーンの名前にリンクすると、if-elseif の混乱全体を回避できます。すべての構成は以下の init() メソッドで行われるため、これは読みやすく、維持するのがはるかに簡単です。メソッド setSceneByTarget() は公開されているため、実行時にアイテムを追加できます。

public class Main extends MovieClip
{
    private var _scenesByTarget:Dictionary;
    public function Main()
    {
        _scenesByTarget = new Dictionary(true);
        //call init() or hook it to ADDED_TO_STAGE event if you want
    }
    public function init():void
    {
        //add your listeners here like this:

        //myItem1.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
        //setSceneByTarget(myItem1, myItem1Scene);

        //myItem2.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
        //setSceneByTarget(myItem2, myItem2Scene);

        //...
    }

    public function setSceneByTarget(targetObj:Object, targetScene:String):void
    {
        _scenesByTarget[targetObj] = targetScene;
    }
    private function jumpToSceneByTarget(targetObj):void
    {
        if (_scenesByTarget[targetObj] != null) {
            gotoAndStop(1, _scenesByTarget[targetObj]);
        }
    }
    private function onMouseDown(evt:MouseEvent):void
    {
        jumpToSceneByTarget(evt.target);
    }
}
于 2013-04-14T17:00:43.630 に答える
0

問題は、else ステートメントの前に対応する右中括弧がないことです。さらに、else の最後にセミコロンがあり、混乱を招きます。

{
else if (nameOfButton=="ysm_g");
{
 gotoAndStop(1, "You_shook_me");

する必要があります

{
//...Whatever code goes here
}
else if (nameOfButton=="ysm_g")
{
   gotoAndStop(1, "You_shook_me");
}
于 2013-04-14T01:28:03.940 に答える