hitTestObject(AS3)错误:访问未定义的属性

时间:2010-09-22 23:10:03

标签: flash

在hitWall函数中,当玩家遇到墙壁时,hitTestObject正在工作。我在闪光舞台上有墙,名为墙,墙2,墙3,墙4。使用相同的概念,我放置了其他动画片段(树)并将它们命名为:tree1,tree2等....等等...

我收到一条错误消息:访问未定义的属性树。

wall.addEventListener(Event.ENTER_FRAME, hitWall);
tree.addEventListener(Event.ENTER_FRAME, hitTree);

// function hitWall --------------------------------------------------------------
    function hitWall(event:Event):void {
        if (player_ary[me].hitTestObject(wall)) {
                player_ary[me].y+=6;
            } else if (player_ary[me].hitTestObject(wall2)) {
                player_ary[me].y-=6;

            } else if (player_ary[me].hitTestObject(wall3)) { 
                player_ary[me].x+=6;

            } else if (player_ary[me].hitTestObject(wall4)) {
                player_ary[me].x-=6;
            }

    }

    // function hitWall --------------------------------------------------------------
    function hitTree(event:Event):void {
        if (player_ary[me].hitTestObject(tree)) {
                player_ary[me].y+=6;
            } else if (player_ary[me].hitTestObject(tree2)) {
                player_ary[me].y-=6;
            } else if (player_ary[me].hitTestObject(tree3)) { 
                player_ary[me].x+=6;
                    }
     }

2 个答案:

答案 0 :(得分:1)

错误表明树MovieClip为空,因此问题不在于代码的这一部分。

如果树MovieClip是添加到舞台的树的实例,请确保在调用方法之前该实例存在。

答案 1 :(得分:0)

如果问题是我认为的那样......

问题是当你有一个类或一个像这样定义的函数时......

{
   var wall:Object = {name:"dodo"};
   wall.addEventListener(Event.ENTER_FRAME,doThis)
   function doThis(event:Event):void{
      trace (wall.name);
   }
}

墙实际上是一个空的。 整个函数在您定义它的函数的上下文之外调用。

您需要做的是测试e.target(它将返回wall对象,因为这是您添加事件侦听器的位置)或添加另一个事件侦听器,并使用类变量(即public var a :INT)

这是人们从as2切换到as3的常见问题

相关问题