我的舞台上有一个物体,叫做obj。
我还有一个名为“物理学”的课程,其中包含一系列物理学方法,例如惯性,重力和弹跳墙。为了做其中的一些,我需要访问stage.stageWidth和stageHeight属性。
我的代码如下:
public function wallBounce(obj)
{
this.stageRef = stageRef
if (obj.x > stageRef.stageWidth || obj.x < 0)
{
obj.vX = (obj.vX * -1) * bounceConst
}
}
这应该检查对象的x值是否大于stageWidth或小于0.当我运行此代码时,它说:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
我是一名半新手程序员,完全是自学成才,不知道造成这种情况的原因。我花了一些谷歌搜索它,我认为它与范围有关,但我不知道如何解决这个问题,甚至不知道范围真正做什么。
再次,对不起,如果这是一个非常愚蠢的问题,但我无法弄清楚我做错了什么。
答案 0 :(得分:0)
this.stageRef = stageRef;
我没有看到此功能对stageRef
的任何引用?另外,因为你在课堂上工作 - this.val
和val
是一回事。你也许会去:
this.stageRef = this.stageRef;
或者
stageRef = stageRef;
问题基本上是stageRef
为空 - 这有帮助吗?看来你的意思是:
this.stageRef = <some reference to stage youve defined somewhere else>;
这样做似乎很奇怪 - 只要您尝试调用的对象wallBounce()
来自DisplayList,您就可以通过stage
访问该阶段。如果你想避免这个函数中的错误(也许它在实际被添加到DisplayList之前运行一次),那么就把它放在顶部:
if(!stage) return;
所以:
public function wallBounce(obj:Object):void
{
if(!stage) return;
//this.stageRef = stageRef
if (obj.x > stage.stageWidth || obj.x < 0)
{
obj.vX = (obj.vX * -1) * bounceConst
}
}
return
将基本上结束该功能。
根据评论:
可以在包含该阶段的Document Class中创建一个静态属性。像这样:
package
{
import flash.display.MovieClip;
import flash.display.Stage;
public class DocumentClass extends MovieClip
{
// vars
public static var stageRef:Stage;
/**
* Constructor
*/
public function DocumentClass()
{
stageRef = stage;
}
}
}
然后您可以从其他类访问舞台,如下所示:
public function wallBounce(obj:Object):void
{
//this.stageRef = stageRef
if (obj.x > DocumentClass.stageRef.stageWidth || obj.x < 0)
{
obj.vX = (obj.vX * -1) * bounceConst
}
}