如何引用对象类中的单个帧?

时间:2015-01-14 22:43:32

标签: actionscript-3

所以,我在我的时间轴的第1帧上有我的角色movieclip。当它击中一个敌人时,电影会进入第二帧,我有一个游戏结束屏幕。但是当角色遇到敌人时,我在运行时会收到此错误:

TypeError: Error #2007: Parameter hitTestObject must be non-null.
    at flash.display::DisplayObject/_hitTest()
    at flash.display::DisplayObject/hitTestObject()
    at Coinsy/update()
TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at Untitled_2_fla::MainTimeline/CharMovement()
TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at Untitled_2_fla::MainTimeline/ResetBox()
TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at Untitled_2_fla::MainTimeline/EnemyBall()

我调试了,似乎问题出现在我的硬币类中:

package  

    {
        import flash.display.*;
        import flash.events.*;

        public class Coinsy extends MovieClip

        {
            var char:MovieClip;
            var MTL = MovieClip(root);

            public function Coinsy() 
            {
                this.addEventListener(Event.ENTER_FRAME, update);
            }
            function update(event:Event):void
            {
                char = MTL.char1;
                // CC = int(root).CC;

                if(hitTestObject(char))
                {
                    this.removeEventListener(Event.ENTER_FRAME, update);
                    parent.removeChild(this);
                    MTL.CC++;
                }
            }
        }
    }

char = MTL.char1;,显然当我有一个以上的框架时,我无法使用MovieClip(root)

char1是我的角色的实例名称,CC是硬币计数var。

我在ActionScript上很陌生,我想知道我做错了什么。谢谢!

1 个答案:

答案 0 :(得分:0)

错误实际上发生在这一行

if(hitTestObject(char))

正在发生的事情是游戏仍在尝试检查游戏结束屏幕上的碰撞。找不到char1对象,因此它变为null。 Null基本上意味着某些东西是空的,所以你不能用它做任何事情。如果您尝试null.something,则会收到错误,someFunction(null)也很可能会导致错误。

快速解决方法是将线路更改为

if(char != null && hitTestObject(char))
正如卡玛提到的那样。

但是,以下三个TypeErrors与您发布的代码无关。它们正在发生,因为某些代码行正在尝试null.somethingCharMovementResetBoxEnemyBall函数可能在不应该被调用时被调用。您可能需要在游戏结束时删除事件侦听器,或添加额外的逻辑来检查空值。