0

我正在尝试制作一个涉及燃烧龙的小骑士的游戏,相当简单,但我是 AS3 新手,似乎无法解决这个问题,有时当我杀死一个骑士时,它会返回一个输出错误:TypeError: Error #1010 :术语未定义且没有属性。在 drogtor/onTick()

我在本网站的其他地方找不到任何相关的解决方案,所以我自己提交了一个问题。

这是(我认为是)相关代码。

package  
{

import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
import global;
import flash.display.DisplayObject;


public class drogtor extends MovieClip 
{
    private var updown:Boolean=true;
    private var fArray:Array;
    private var eArray:Array;
    var wpressed:Boolean = false;
    var apressed:Boolean = false;
    var dpressed:Boolean = false;
    var spressed:Boolean = false;
    var kspawn:Number = 5;
    public function drogtor() 
    {
        addEventListener(Event.ENTER_FRAME, onTick);
        stage.addEventListener(KeyboardEvent.KEY_DOWN, fliy);
        stage.addEventListener(KeyboardEvent.KEY_UP, fliy);
        fArray = new Array();
        eArray = new Array();
    }
    public function onTick(e:Event):void
    {
        var fcount:int=0;
        var sdargon:int=10;
        var rdargon:int=6;
        var Angle:Number = (2 * Math.PI * (dargon.rotation/360));
        var dy:Number = sdargon * Math.cos(Angle);
        var dx:Number = sdargon * Math.sin(Angle);
        HitBox.x = dargon.x;
        HitBox.y = dargon.y;
        HitBox.rotation = dargon.rotation;


        //Flame Spewer
        if (global.count==9)
        {
            var fAngle:Number = (2 * Math.PI * (dargon.rotation/360));
            var fdy:Number = 10 * Math.cos(fAngle);
            var fdx:Number = 10 * Math.sin(fAngle);
            var ftemp:Flame=new Flame;
            ftemp.x=dargon.x + (10 * fdx);
            ftemp.y=dargon.y - (10 * fdy);
            ftemp.rotation=dargon.rotation + Math.random() * (15-(-15)) + (-15);
            fArray.push(ftemp);
            addChildAt(ftemp, 0);
        }
        var kgen:int = Math.floor((Math.random() * 3)+1);
        var stageside:int = Math.floor((Math.random() * 4)+1)
        if (kgen == 1)
        {
            if (Math.floor((Math.random() * 100) + 1) <= kspawn)
            {
                var ktemp:keniget = new keniget;
                if (stageside == 1)
                {
                    ktemp.x = Math.random() * stage.stageWidth;
                    ktemp.y = 0
                }
                else if (stageside == 2)
                {
                    ktemp.x = Math.random() * stage.stageWidth;
                    ktemp.y = stage.stageHeight;
                }
                else if (stageside == 3)
                {
                    ktemp.x = 0;
                    ktemp.y = Math.random() * stage.stageHeight;
                }
                else if (stageside == 4)
                {
                    ktemp.x = stage.stageWidth;
                    ktemp.y = Math.random() * stage.stageHeight;
                }
                eArray.push(ktemp);
                addChildAt(ktemp, 0);
            }
        }
        for (var iKl:int = eArray.length-1; iKl >= 0; iKl --)
        {
            var krotation:Number = (Math.atan2(eArray[iKl].y-dargon.y, eArray[iKl].x-dargon.x) * 180/Math.PI) - 90;
            eArray[iKl].rotation = krotation
            var kangle:Number = (2 * Math.PI * (eArray[iKl].rotation/360));
            var edx:Number = 3 * Math.sin(kangle);
            var edy:Number = 3 * Math.cos(kangle);
            eArray[iKl].x += edx;
            eArray[iKl].y -= edy;
            if (eArray[iKl].hitTestObject(HitBox))
            {
                removeChild(eArray[iKl]);
                eArray.splice(iKl, 1);
            }
            for (var iF:int=fArray.length-1; iF>=0; iF--)
            {
                if (eArray[iKl].hitTestObject(fArray[iF]))
                {
                    removeChild(eArray[iKl]);
                    eArray.splice(iKl, 1);
                    kspawn += 0.5
                }
            }
        }





        for(var iFl:int=fArray.length-1; iFl>=0; iFl--)
        {
            if(fArray[iFl].currentFrame==fArray[iFl].totalFrames)
            {
                removeChild(fArray[iFl]);
                fArray[iFl]=null;
                fArray.splice(iFl, 1);
            }
        }
        if(updown)
        {
            dargon.rotationX-=1;
            if(dargon.rotationX == -10)
            {
                updown = false;
            }
        }
        if(!updown)
        {
            dargon.rotationX+=1;
            if(dargon.rotationX == 10)
            {
                updown = true;
            }
        }
        //Movement
        if(wpressed)
        {
            dargon.x += dx;
            dargon.y -= dy;
        }
        if(apressed)
        {
            dargon.rotation -= rdargon;
        }
        if(dpressed)
        {
            dargon.rotation += rdargon;
        }
        if(spressed)
        {
            dargon.x -= ((1/4) * dx);
            dargon.y += ((1/4) * dy)
        }
    }
    public function fliy(ke:KeyboardEvent):void
    {
        if(ke.type == "keyDown")
        {
            //key=A
            if(ke.keyCode==87)
            {
                wpressed=true;
            }
            //Key=A
            if(ke.keyCode==65)
            {
                apressed=true;
            }
            //Key=D
            if(ke.keyCode==68)
            {
                dpressed=true;
            }
            if(ke.keyCode==83)
            {
                spressed=true;
            }
        }
        if(ke.type == "keyUp")
        {
            //key=A
            if(ke.keyCode==87)
            {
                wpressed=false;
            }
            //Key=A
            if(ke.keyCode==65)
            {
                apressed=false;
            }
            //Key=D
            if(ke.keyCode==68)
            {
                dpressed=false;
            }
            if(ke.keyCode==83)
            {
                spressed=false;
            }
        }
    }
}

}
4

1 回答 1

2

问题是,即使您从显示列表中删除了骑士,代码仍在 onTick 函数中运行,并且您正在尝试访问不存在的东西,我建议您检查骑士的引用是否为 null 或不是,如果不是,则运行代码,否则跳过它。

编辑:
每当您为实例 ( myInstance = null) 清空时,您就无法再访问它的属性、函数等。如果您尝试,那么您会收到上面的错误。为避免这种情况,请检查您的对象是否为空。

if(myInstance != null) {
    //do your stuff with your instance
}
于 2014-03-30T23:34:40.893 回答