我有一个名为ChestScene的类,它代表我正在处理的.fla文件中的一个场景/ MovieClip。我有很多问题似乎根植于对如何正确使用附加代码的对象的基本误解。我的理解是将对象添加到舞台会自动实例化它,所以我现在所做的只是实例化并添加到我的Main方法的构造函数中的舞台ChestScene()。我认为这很简单:
public class Main extends MovieClip {
var chest:Chest = new Chest();
public function Main() {
stage.addChild(chest);
}
但是我收到了这个错误:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Chest()/startScene()
at Chest()
at Main()
所以我的第一个问题是为什么Chest null?这个对象存在于我的fla中。如果我通过从库中拖动将它添加到舞台上,则该类按预期工作。 addChild似乎适用于我使用相同方式的其他对象,所以我不知道为什么我不能在这个对象上使用它。
如何使用Main方法实例化对象并访问/更改所述对象相对于舞台的属性?我如何为嵌套在初始对象中的对象做同样的事情?
*****回答后编辑
感谢您的回复并教我如何阅读调试信息。 startScreen()确实是罪魁祸首,问题出现了:
stage.addEventListener(Event.ENTER_FRAME, gameLoop)
删除阶段并将侦听器添加到修复了该错误的对象,所以值得称赞!但我还是很困惑;为什么尝试将侦听器添加到舞台会导致null错误?我不明白为什么舞台在这一点上会为空。另外,删除" stag。"从addEventListener导致保持场景的帧的大小变小,这裁剪了我的很多图像。为什么事件监听器会影响我的stageWidth和height?这就是为什么我还问了一些关于如何正确定位相对于舞台宽度和高度的事情的问题,因为我知道它与错误有关。
答案 0 :(得分:0)
为什么Chest null?
Chest
不是null
。它是类的构造函数,不能是null
。
您应该注意附加到错误的堆栈跟踪(消息下方的“at ...”行)。 它会告诉您错误发生的位置。从下往上阅读它会为您提供执行方法调用的顺序。
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Chest()/startScene()
at Chest()
at Main()
Main()
名为Chest()
,Chest()
名为startScene()
, BOOM!,这是错误发生的地方。
要调试此错误,请查看startScene()
。那里的东西是null
。
查看您当前的代码:
stage.addChild(chest);
我想您还尝试在stage
中向Chest()
添加内容。但stage
中null
不可用(Chest()
)。
一般来说,它是bad practice to add things to stage
as can be read in the documentation of addChild()
只需添加到对象而不是stage
:
addChild(chest);