几乎所有行为:ypeError:错误#1009:无法访问空对象引用的属性或方法

时间:2012-10-13 08:57:30

标签: actionscript-3 flash class

我遇到了这个问题而且无法解决这个问题

我为uni制作平台游戏

我有2个文件

flashgame.fla和Coin.as(这是Coin类的代码)

我有代码说明一旦玩家收集了所有硬币,框架将从第1帧变为第2帧。 我何时收到此消息

  

TypeError:错误#1009:无法访问null的属性或方法   对象参考。在Coin / update()TypeError:错误#1009:不能   访问null对象引用的属性或方法。在   flashgame_fla :: MainTimeline /回路()

我尝试过Try and Catch和其他各种事情

我认为这样做是因为Coin.as扩展了MovieClip,所以当它进入下一帧时,它仍然试图找到一个没有任何东西的硬币。

这是Coin.as的代码


package  {

import flash.display.MovieClip;
import flash.events.*;


public class Coin extends MovieClip {
    var player:MovieClip;
    var mainTimeLine = MovieClip(root);

    public function Coin() {
        this.addEventListener(Event.ENTER_FRAME, update);
    }

    function update(event:Event):void
    {
        player=MovieClip(root).player;
        if(this.hitTestObject(player))
        {
            this.removeEventListener(Event.ENTER_FRAME, update);
            parent.removeChild(this);
            mainTimeLine.coinCount++;
        }

    }
}

}

我在flashgame.fla中有一个数组,记录游戏中的所有硬币。当玩家击中它们时,它们会从阵列中拼接出来。转到第2帧时也可能导致问题

来自flashgame.fla的重要内容


var coin:Array = new Array();
for (i=0; i<numChildren; i++)
{
    if (getChildAt(i) is Coin)
    {
        coin.push(getChildAt(i).getRect(this));
    }
}

拼接硬币


for (i=0; i<coin.length; i++)
    {
        if (player.getRect(this).intersects(coin[i]))
        {
            coinSnd.play();
            coin.splice(i,1);
        }
    }

感谢您提供的任何帮助 如果你还需要我的任何东西请问:) 全部用截图

2 个答案:

答案 0 :(得分:0)

这很可能是因为在Coin类的更新功能中找不到播放器。这是因为即使显示对象不在舞台上(即您通常不想要的),也会运行ENTER_FRAME事件。在这种情况下,你试图对玩家进行一次击球。

要解决此问题,您可以在硬币连接到舞台后立即开始运行更新,并在从舞台上移除后立即停止运行。

public function Coin() {
   this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
   this.addEventListener(Event.REMOVED_FROM_STAGE, onRemovedFromStage);
}

function onAddedToStage(event:Event):void {
   this.addEventListener(Event.ENTER_FRAME, update);
}

function onRemovedFromStage(event:Event):void {
   this.removeEventListener(Event.ENTER_FRAME, update);
}

答案 1 :(得分:0)

发生错误的是哪个行号?那应该告诉你哪个变量为空。

我的猜测,基于这部分错误:“TypeError:错误#1009:无法访问空对象引用的属性或方法。在Coin / update()”,是parent的硬币为空,因为您已移动到新的关键帧,并且该实例已从舞台中删除。

也就是说,我怀疑parent.removeChild(this);行发生了错误 - 这是正确的吗?

如果是这种情况,那么在调用parent之前检查removeChild是否为空。