2013-09-25 25 views
0

注意这在ActionScript 2来完成,由于我的限制到Flash Player播放器的观众8.的Flash AS2掌握动态动作按钮到MovieClip类

我试图建立一个扩展底座的简单类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); 
    } 

} 

所以,问题是,我怎么重视(或有存在于影片剪辑)一个按钮,我可以提供该按钮的onMouseDown或onMouseUp类型处理程序,只有当我点击实际的按钮时才会起作用。我在这里做错了什么...我尝试了大量不同的想法,但似乎没有任何工作。记住它是AS2而不是AS3。谢谢。

+1

它已经为AS2一段时间,但你尝试'this.myButton.onRelease = clickMe;'?并且你没有任何'Test'实例的点击事件吗? (边注:使用this.getNextHighestDepth(),而不是_root,让你安装什么的下一个深度) – zamnuts

+0

行this.myButton.onMouseDown给我一个错误说有一个名为“为myButton”的属性。我理解为什么这么说,但我无法理解attachMovie如何在类中工作,以及如何从中获取可供我使用的属性。 –

+0

感谢Zamnuts ...它看起来好像只是使用this.onRelease会产生变化,如果我使用的是我的movieclip中的按钮(与类一起)在库中,而我只是在类级别使用onRelease比试图将其附加到按钮。我觉得有点奇怪,但至少它似乎在工作。 –

回答

1

三点:

  1. 记住,attachMovie返回对新 附着的movieclip的引用;使用这个你的优势。

  2. 而且,onRelease是首选的方式,它是最有 点击相关的,看到这张贴SO“What is the difference between the onMouseUp/Down and onPress/Release events in Flash?”。

  3. 最后,得到了下一个最大的深度(与 getNextHighestDepth)时,记住每个影片剪辑都有自己的深度 系统(即使在内部有一个全球性的),所以 总能找到相对深度你也附上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); 
    } 
} 
+0

感谢Zamnuts ......我没有意识到attachMovie有一个返回值。 –