1

我在一个框架中有 2 个符号:鹿和人。我想在第 45 帧停止 flash 电影,如果用户单击鹿播放第 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,您遇到的问题是与对象范围相关的经典问题。这不是 ActionScript 2 的错误,而是 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 的情况下解决此问题的一种快速方法是

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);
}

更优雅的实现是使用delegate,因此您不必对 _root 或“context”属性进行硬编码。

于 2012-07-28T17:22:30.733 回答
1

现在您可以从第一个关键帧(“开始”,关键帧 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
}

这应该可行,但未经测试。笔记本上没有 Flash。我希望它对你有帮助。可能不会 - 问我。

于 2012-07-28T17:09:47.777 回答
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 路径。当按钮/剪辑在根时间线上时,您可以编写例如 _root.gotoAndPlay("man_start") 。如果按钮在 man 剪辑中,您可以编写例如:

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