我收到错误:null对象引用的方法。我很困惑,不知道究竟是什么原因
所以我在舞台上有一个播放器movieClip,它有一个“player_mc”实例,它将通过我的Document类传递到Player类。
的 Player.as
import flash.display.*;
import flash.events.*;
public class Player extends MovieClip
{
public var myPlayer:MovieClip;
public function Player(player:MovieClip)
{
myPlayer = player;
addEventListener(Event.ENTER_FRAME,on_enter);
}
Document.as
import flash.display.*;
import Components.Player.Player;
public class Game_Main extends MovieClip
{
public var player:Player;
public function Game_Main()
{
player = new Player(player_mc);
}
}
现在我认为这是问题所在。我在舞台上有一个green_enemy movieclip,有基类Enemy Enemy.as
import flash.display.MovieClip;
import Components.Player.Player;
import flash.events.Event;
public class Enemy extends MovieClip
{
var theplayer:Player;
public function Enemy()
{
this.addEventListener(Event.ENTER_FRAME,on_enter);
}
public function on_enter(e:Event):void
{
if (this.hitTestObject(theplayer.myPlayer)) //calls player_mc from Player class
{
trace("hi");
}
}
}
我喜欢做的敌人功能是当敌人与“player_mc”(在舞台上)碰撞时它会做一些事情。也许我的代码错了。
任何帮助/提示将不胜感激。谢谢!
答案 0 :(得分:0)
在你的敌人中,我看到了
var theplayer:Player;
未初始化。它是私有的,因此您无法从外部定义它。这意味着异常来自这里
this.hitTestObject(theplayer.myPlayer)
您正试图从 null 调用myPlayer
。
尝试在构建Enemy类时定义此变量。
要防止出现空异常,您可以检查该播放器是否为空
public function on_enter(e:Event):void
{
if (theplayer && this.hitTestObject(theplayer.myPlayer))
{
trace("hi");
}
}
答案 1 :(得分:0)
为了扩展ZuyEL所说的,你的变量在你的敌人类中没有全局定义,因为你只是在你的敌人函数中添加一个var。相反,请执行以下操作
public var thePlayer:Player;
在你的敌人类之后,在敌人功能之前写上面的内容。现在它可用于整个类,并且在以后调用时将不再为null。