Flash AS2获取带动态动作的按钮进入movieClip类

时间:2013-09-25 10:45:41

标签: flash button actionscript-2

请注意,由于我的受众播放器仅限于Flash Player 8,因此必须在ActionScript 2中完成此操作。

我正在尝试构建一个扩展基本Movieclip类的简单类。 然后,我使用属性面板将此类应用于库中的movieclip,并在其中为其指定类名。在我使用attachMovie附加了movieclip他的舞台之后,我能够在该对象上使用我的类和方法等。我似乎无法工作的是我在movieclip中的按钮。最初我在库movieclip中设置了一个按钮,但是我似乎无法在课堂上定位。我想做的只是在按钮内设置一个简单的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。感谢。

1 个答案:

答案 0 :(得分:1)

三点:

  1. 请记住,attachMovie会返回对新内容的引用 附电影剪辑;使用这个对你有利。

  2. 此外,onRelease是首选方式,它与a最相关 点击,查看此SO帖子“What is the difference between the onMouseUp/Down and onPress/Release events in Flash?”。

  3. 最后,当获得下一个最高深度时(使用 getNextHighestDepth),请记住每个MovieClip都有自己的深度 系统(即使在内部只有一个全局的),所以 总能找到相对于你所附着的MC的深度。以来 在attachMovie上调用this,然后getNextHighestDepth 应该在this上调用。

  4. 更新代码:

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