1

フレームには鹿と人間の2つのシンボルがあります。フレーム45でフラッシュムービーを停止したいのですが、ユーザーが鹿の再生フレーム50〜100をクリックした場合、ユーザーが男性をクリックした場合、フレーム200〜250を再生します。フレーム45のコードは次のとおりです。

stop();
var _buttons:Array = [deer, man];

for(var i = 0; i < _buttons.length; i++){
    _buttons[i].onRelease = function() {
        gotoAndPlay(100);
    }

    _buttons[i].onRelease = function() {
        gotoAndPlay(200);
    }
}

ムービーがフレーム45で停止し、オブジェクトをクリックしても何も起こりませんが、エラーは発生しません。

4

3 に答える 3

2

ActionScript 2を使用している場合、発生する問題は、古典的なオブジェクトスコープ関連の問題です。これはActionScript2の障害ではなく、JavaScriptの仕様です。次のスニペットを検討してください

trace(this);  // it displays the movieclip that hosts the button
myButton.onRelease = function() {
    trace(this);  //oops, it is the button, not the host.
}

_rootに頼らずにこれを回避するための1つの簡単なハックは

stop();
var _buttons:Array = [deer, man];

trace("deer button: " + deer);
deer.context = this;
deer.onRelease = function() {
    trace("deer button is clicked.");
    deer.context.gotoAndPlay(100);
}

trace("man button: " + deer);
man.onRelease = function() {
    trace("man button is clicked.");
    man.context.gotoAndPlay(200);
}

より洗練された実装では、デリゲートを使用するため、_rootまたは「context」プロパティをハードコーディングする必要はありません。

于 2012-07-28T17:22:30.733 に答える
1

試す:

deer.onRelease = function() {
   this.gotoAndPlay(50);
   // make sure that is an stop(); Action on frame 100
}

man.onRelease = function() {
   this.gotoAndPlay(200);
   // make sure that is an stop(); Action on frame 250
}

敏感なMoviclipまたはButtonにどのように名前を付けましたか-「鹿」と「男」?フレーム番号ではなく、名前付きフレームで作業することをお勧めします。キーフレームに移動し、キーフレームの名前を変更します。次に、たとえば次のように記述できます。this.gotoAndPlay( "man_start");

AS2としてタグ付けします-私があなたを助けることができることを願っています。よろしくお願いします

編集:gotoAndPlayへの正しいパスがあることを確認してください。たとえば、ルートtimlineのボタン/クリップのときに_root.gotoAndPlay( "man_start")と書くことができます。ボタンが男性用クリップにある場合は、たとえば次のように書くことができます。

deer.your_named_button.onRelease = function() {
    this._parent.gotoAndPlay("man_start");
}
于 2012-07-28T16:10:24.270 に答える
1

これで、最初のキーフレーム( "start"、keyframe 0)からアクションパネルに書き込むことができます。

stop(); // you have write it in the first step

// klick on your deer button and name it "deer_btn", if isn't it
deer_btn.onRelease = function() {
    _root.gotoAndPlay("play_deer");
    trace("I pressed deer_btn"); // can you delete later
}

// klick on your man button and name it "man_btn", if isn't it
man_btn.onRelease = function() {
    _root.gotoAndPlay("play_man");
    trace("I pressed man_btn"); // can you delete later
}

これは動作するはずですが、テストされていません。ノートブックにフラッシュはありません。お役に立てば幸いです。そうではないかもしれません-私に聞いてください。

于 2012-07-28T17:09:47.777 に答える