所以,我在我的时间轴的第1帧上有我的角色movieclip。当它击中一个敌人时,电影会进入第二帧,我有一个游戏结束屏幕。但是当角色遇到敌人时,我在运行时会收到此错误:
TypeError: Error #2007: Parameter hitTestObject must be non-null.
at flash.display::DisplayObject/_hitTest()
at flash.display::DisplayObject/hitTestObject()
at Coinsy/update()
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Untitled_2_fla::MainTimeline/CharMovement()
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Untitled_2_fla::MainTimeline/ResetBox()
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Untitled_2_fla::MainTimeline/EnemyBall()
我调试了,似乎问题出现在我的硬币类中:
package
{
import flash.display.*;
import flash.events.*;
public class Coinsy extends MovieClip
{
var char:MovieClip;
var MTL = MovieClip(root);
public function Coinsy()
{
this.addEventListener(Event.ENTER_FRAME, update);
}
function update(event:Event):void
{
char = MTL.char1;
// CC = int(root).CC;
if(hitTestObject(char))
{
this.removeEventListener(Event.ENTER_FRAME, update);
parent.removeChild(this);
MTL.CC++;
}
}
}
}
在char = MTL.char1;
,显然当我有一个以上的框架时,我无法使用MovieClip(root)
。
char1是我的角色的实例名称,CC是硬币计数var。
我在ActionScript上很陌生,我想知道我做错了什么。谢谢!
答案 0 :(得分:0)
错误实际上发生在这一行
if(hitTestObject(char))
正在发生的事情是游戏仍在尝试检查游戏结束屏幕上的碰撞。找不到char1
对象,因此它变为null。 Null基本上意味着某些东西是空的,所以你不能用它做任何事情。如果您尝试null.something
,则会收到错误,someFunction(null)
也很可能会导致错误。
快速解决方法是将线路更改为
if(char != null && hitTestObject(char))
正如卡玛提到的那样。
但是,以下三个TypeErrors与您发布的代码无关。它们正在发生,因为某些代码行正在尝试null.something
。 CharMovement
,ResetBox
和EnemyBall
函数可能在不应该被调用时被调用。您可能需要在游戏结束时删除事件侦听器,或添加额外的逻辑来检查空值。