0

请注意,这必须在 ActionScript 2 中完成,因为我的观众播放器仅限于 Flash 播放器 8。

我正在尝试构建一个简单的类来扩展基本的 Movieclip 类。然后,我使用属性面板将此类应用到库中的影片剪辑,并在其中为其指定类名。这一切都很好,在我使用 attachMovie 将影片剪辑附加到舞台后,我可以在该对象上使用我的类和方法等。我似乎无法开始工作的是我在影片剪辑中的按钮。最初我在库影片剪辑中设置了一个按钮,但是我似乎无法在我的班级中定位它。我想做的只是在按钮中设置一个简单的 getURL 类型的东西,但它似乎不起作用。

我尝试只在类中分配 onMouseDown 处理程序而不是按钮,这确实有效,但发生在我单击舞台上的任何地方而不是仅仅在图形区域上方。这会触发我在舞台上拥有的类的任何其他实例上的所有其他处理程序,因此它们都会立即触发。但是,使用 onRollOver 和 onRollOut 确实按我的预期工作。

我还尝试在库中设置另一个按钮并使用 this.attachMovie 和我的班级来附加它,但我似乎仍然无法处理它。

我创建了一个非常简单的测试脚本来尝试说明我正在尝试做的事情:-

class Test extends MovieClip {

    public function Test() {
        // constructor code
        this.attachMovie("theButton" , "myButton" , _root.getNextHighestDepth() )
        this.myButton.onMouseDown = clickMe;
        this._x = Math.random() * 800;
        this._y = Math.random() * 400;
    }


    public function clickMe() {
        trace("I have been clicked"+this._name);
    }

}

所以,问题是,我如何附加(或存在于影片剪辑中)一个按钮,我可以为该按钮提供一个 onMouseDown 或 onMouseUp 类型的处理程序,只有当我点击实际按钮时才有效?我在这里做错了什么......我尝试了很多不同的想法,但似乎没有任何效果。请记住,它是 AS2 而不是 AS3。谢谢。

4

1 回答 1

1

三点:

  1. 请记住,attachMovie返回对新附加的影片剪辑的引用;使用它对您有利。

  2. 此外,onRelease这是首选方式,它与点击最相关,请参阅此 SO 帖子“ Flash 中的 onMouseUp/Down 和 onPress/Release 事件有什么区别? ”。

  3. 最后,在获得下一个最高深度时(使用 getNextHighestDepth),请记住每个 MovieClip 都有自己的深度系统(尽管内部只有一个全局系统),因此请始终找到与您附加的 MC 相关的深度。既然 attachMovie是被召唤this,那么就getNextHighestDepth 应该被召唤this

更新代码:

class Test extends MovieClip {
    public function Test() {
        var btn = this.attachMovie("theButton" , "myButton" , this.getNextHighestDepth() );
        // "bnt" is now the button instance, while "this" is still the Test mc
        btn.onRelease = btn.onReleaseOutside = this.clickMe; // i roped in onReleaseOutside, but this might not be necessary
        this._x = Math.random() * 800;
        this._y = Math.random() * 400;
    }
    public function clickMe() {
        trace("I have been clicked"+this._name);
    }
}
于 2013-09-25T12:39:11.897 回答