代码之家  ›  专栏  ›  技术社区  ›  Darren Crabb

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

  •  0
  • Darren Crabb  · 技术社区  · 11 年前

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

    我正试图构建一个简单的类来扩展Movieclip基类。 然后,我使用财产面板将该类应用于库中的一个电影剪辑,并在其中为其指定类名。这一切都很好,在我使用attachMovie将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);
        }
    
    }
    

    所以,问题是,我如何附加(或在movieclip中显示)一个按钮,以便为该按钮提供onMouseDown或onMouseUp类型的处理程序,该处理程序只有在我单击实际按钮时才能工作?我在这里做错了什么。。。我尝试了很多不同的想法,但似乎都无效。记住这是AS2而不是AS3。谢谢

    1 回复  |  直到 11 年前
        1
  •  1
  •   Community Egal    7 年前

    三点:

    1. 回想起 attachMovie 返回对new的引用 附加电影剪辑;利用这个优势。

    2. 而且 onRelease 是首选方式,它与 单击,查看此SO帖子“ What is the difference between the onMouseUp/Down and onPress/Release events in Flash? ".

    3. 最后,当获得下一个最高深度时( getNextHighestDepth ),请记住,每个电影剪辑都有自己的深度 系统(尽管内部只有一个全局系统),因此 总是找到相对于你所连接的MC的深度。自从 附件电影 正在被呼叫 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);
        }
    }