【问题标题】:Can't access child MovieClips in ADDED_TO_STAGE event handler无法在 ADDED_TO_STAGE 事件处理程序中访问子 MovieClip
【发布时间】:2013-06-19 13:06:29
【问题描述】:

问题解决了。请参阅 cmets。由于声誉积分,我无法回答自己的问题。

我正在尝试开发一个简单的 Flash 游戏。我有一个符号和一个链接到这个符号的 AS3 类,称为 Splash(代表游戏的介绍屏幕)和一个 StartButton 符号。使用给定实例名称“button_start”的 Flash IDE 将 StartButton 符号放置在 Splash 符号中。

在 Splash.as 我试图访问 StartButton 的 ADDED_TO_STAGE 事件处理程序但我得到空指针异常。这是代码:

public function Splash() {
    trace("splash const");
    addEventListener(Event.ADDED_TO_STAGE, ats);
    super();
}

public function ats(e:Event) {
    trace("splash ats");
    var i:int = 0;
    for (i=0;i<numChildren;i++) {
        if (getChildAt(i).name.search("button")) {
            trace("bulundu");
            buton = getChildAt(i) as MovieClip;
            buton.addEventListener(Event.ADDED_TO_STAGE, butonats);
        }
    }
}

function butonats(e:Event) {
    trace("buton ats");         
}

结果:

splash const
splash ats
bulundu
TypeError: Error #1009: Boş nesne başvuru özelliğine veya yöntemine erişilemiyor.
    at Splash/ats()

当所有孩子都准备好时,ADDED_TO_STAGE 不运行吗?哪里错了想不出来。

【问题讨论】:

  • 您搜索过“Actionscript 3 TypeError: Error #1009”吗?我还注意到您没有声明您的 buton 对象 var buton:MovieClip;
  • 感谢您的评论,我在班级级别声明了按钮。我也在谷歌上搜索 TypeError 1009。它通常发生在你引用对象时它还没有准备好。他们建议像我一样使用 ADDED_TO_STAGE 事件。找不到任何不同的东西。
  • 您是否跟踪过您的 DisplayList 以查看真正可用的内容?
  • 嗯。有趣的是我现在追踪它,结果如下:buton: null / getChildAt(i): [object Shape]
  • 你知道了,我想,Shape 不是电影剪辑。 as 运算符将返回 null:as operator documentation

标签: actionscript-3 flash actionscript


【解决方案1】:

*button_start* 不是 MovieClip 的实例,它是一个 Shape。因此,对代码进行此更改解决了问题。

var buton:Shape; 
public function Splash() {
   trace("splash const");
   addEventListener(Event.ADDED_TO_STAGE, ats);
   super();
}

public function ats(e:Event) {
   trace("splash ats");
   var i:int = 0;
   for (i=0;i<numChildren;i++) {
       if (getChildAt(i).name.search("button")) {
           trace("bulundu");
           buton = getChildAt(i) as MovieClip;
           buton.addEventListener(Event.ADDED_TO_STAGE, butonats);
       }
   }
}

【讨论】:

  • 我没有看到 button_start,你的意思是 button 来自这一行:getChildAt(i).name.search("button")?
  • Shape 不是InteractiveObject 所以Shape 不适合屏幕上的按钮。查看父类DisplayObject查看fork。
  • button_start 是一个简单的单帧电影剪辑符号,使用 Flash IDE 添加到 Splash 符号中。我对 InteractiveObject 对象或 DisplayObject 没有足够的知识,但我认为对于简单的一帧 Shape 就足够了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 2023-04-04
  • 2010-12-06
  • 1970-01-01
  • 2015-06-17
相关资源
最近更新 更多