【问题标题】:Add mouse event listener on timeline在时间轴上添加鼠标事件监听器
【发布时间】:2013-06-07 22:33:55
【问题描述】:

我正在尝试将EventListener 添加到我的按钮,该按钮是另一个MovieClip 的子按钮,但我收到以下错误。代码放在我的时间线内。

TypeError:错误 #1009:无法访问 null 的属性或方法 对象引用。在 Exotic_fla::MainTimeline/frame1()

movClip.Play_btn.addEventListener(MouseEvent.CLICK,playfunc);
//movClip.Play_btn.visible = false;// this give the same result
function playfunc(evt:MouseEvent){
    SoundMixer.stopAll();
    gotoAndPlay(1, "Scene 2");
}

【问题讨论】:

  • movClip 是否放置在第 1 帧的舞台上?
  • movClip 或 Play_btn 是 null,很可能是因为您在尚未加载它们的帧上运行上面的代码,或者在错误的范围内运行上面的代码。
  • 是的,movClip 被放置在第 1 帧的 stag 上。:-|
  • 尝试使用getChild 获取Play_btn,而不是dot
  • 感谢您的帮助,但我是 as3 的新手。如果你愿意,你可以发布一个小代码吗?你能解释一下 getChild 是如何工作的吗?(对不起,我的英语不好)。

标签: actionscript-3 flash-cs6


【解决方案1】:

如果Play_btn 是唯一的孩子,这意味着它是movClip 包含的唯一内容,您可以替换

movClip.Play_btn.addEventListener(MouseEvent.CLICK,playfunc);

movClip.getChildAt(0).addEventListener(MouseEvent.CLICK,playfunc);

否则试试这个

for (var i:uint = 0; i < movClip.numChildren; i++) {
            if (movClip.getChildAt(i) is MovieClip) {
                 if (movClip.getChildAt(i).name == "Play_btn") {
                        movClip.Play_btn.addEventListener(MouseEvent.CLICK,playfunc);
                        trace("Play_btn found");
                        break;
                 }
            }
}

function playfunc(evt:MouseEvent) {
    trace("It works");
    SoundMixer.stopAll();
    gotoAndPlay(1, "Scene 2");
}

更新


请确保您已将 instance 命名为 Play_btnmovClip 并且它不是类名,即库中的名称。 而不是这一行

movClip.Play_btn.addEventListener(MouseEvent.CLICK,playfunc);

使用下面的

movClip.getChildByName("Play_btn").addEventListener(MouseEvent.CLICK,playfunc);

【讨论】:

  • 好的,这会使错误消失,但是我的 play btn 功能不起作用...您知道吗?
  • 主要的想法是我必须将预加载器与游戏连接起来。我花了 3 个小时的时间……:-o 非常感谢!
  • @user2465147 我插入了一个trace 语句,试着看看你是否收到任何消息。
  • 我将跟踪放在函数中,但它没有出现在输出中:-|
  • 我又添加了一个trace 声明。
猜你喜欢
  • 2013-07-20
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 2020-02-20
  • 2011-09-19
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多