0

我得到错误:空对象引用的方法。我很困惑,不知道真正的原因是什么。
所以我在舞台上有一个播放器movieClip,它有一个“player_mc”实例,它将通过我的Document类并进入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);
    }

文档.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 电影剪辑,它有基类 Enemy。
敌人

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");
        }


    }



}

我喜欢在 Enemy 功能上做的是,当 Enemy 与“player_mc”(在舞台上)发生碰撞时,它会做一些事情。也许我的代码是错误的。
任何帮助/提示将不胜感激。谢谢!

4

2 回答 2

0

为了扩展 ZuyEL 所说的,你的变量不是在你的敌人类中全局定义的,因为你只是在你的敌人函数中添加一个 var 。相反,请执行以下操作

public var thePlayer:Player;

在你的 Enemy 类之后,在 Enemy 函数之前写上上面的内容。现在它可供整个班级使用,并且在您以后调用它时将不再为空。

于 2013-07-24T09:12:22.577 回答
0

在你的敌人中。正如我所见

var theplayer:Player;

未初始化。它是私有的,因此您无法从外部定义它。这意味着异常来自这里

this.hitTestObject(theplayer.myPlayer)

您正在尝试myPlayernull调用。

尝试在构造 Enemy 类时定义此变量。


为防止出现空异常,您可以检查播放器是否为空

public function on_enter(e:Event):void
{
    if (theplayer && this.hitTestObject(theplayer.myPlayer)) 
    {
        trace("hi");
    }
}
于 2013-07-24T08:59:42.597 回答