在我正在制作的游戏中,您选择一个形状,然后在下一个屏幕上选择一种颜色。形状选择器工作正常,并加载6'形状中的一种。电影剪辑进入游戏的下一个阶段。在这个舞台上,我有按钮来控制颜色。我试图通过启动自定义事件使按钮更改动画片段的颜色。然后,每个动画片段中的类中的侦听器将检测到这一点。
到目前为止,这是我的代码:
包含颜色更改按钮的屏幕:
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
public class ColorSelector extends MovieClip
{
public function ColorSelector()
{
charcoal.addEventListener (MouseEvent.CLICK, onClickCharcoal );
}
public function onClickCharcoal (mouseEvent:MouseEvent): void
{
dispatchEvent (new ColorEvent (ColorEvent.CHARCOAL) );
trace ("click")
}}
自定义事件类:
package
{
import flash.events.Event;
public class ColorEvent extends Event
{
public static const CHARCOAL:String = "charcoal";
public function ColorEvent( type: String )
{
super ( type );
}
}}
正在采取行动的影片剪辑:
package {
import flash.display.MovieClip;
public class Gobbert extends MovieClip {
public function Gobbert()
{
this.addEventListener (ColorEvent.CHARCOAL, makeCharcoal)
}
public function makeCharcoal (colorEvent: ColorEvent) :void
{
this.alpha = .5
}
}
在我看来,事件并没有通过听众进入班级。我真的可以用一双新鲜的眼睛帮我弄清楚发生了什么。该程序没有给我任何错误,也没有做太多其他事情。提前谢谢!
答案 0 :(得分:0)
您在构造函数中缺少bubbles参数。如果省略,则默认为false。在自定义事件上调用super应该是:
super(type, bubbles, cancelable);
您需要通过addEventListener函数调用或自定义事件构造函数内的硬代码将气泡传递为true。
还要确保目标(Gobbert实例)影片剪辑位于事件冒泡路径上,这意味着ColorSelector必须是Gobbert显示列表的子代。如果您的显示列表没有以这种方式设置,您可能需要重新考虑您的方法,并将事件从选择器传播到公共父级,然后通过该公共父级在Gobbert上设置颜色。