从另一个类调用类的movieclip,错误#1009

时间:2013-07-24 08:55:47

标签: actionscript-3 flash-cs5

我收到错误: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”(在舞台上)碰撞时它会做一些事情。也许我的代码错了。
任何帮助/提示将不胜感激。谢谢!

2 个答案:

答案 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。