Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays TypeError:Error#1010:术语未定义且没有属性。成功删除对象的问题_Arrays_Actionscript 3_Removechild_Addchild_Array Splice - Fatal编程技术网

Arrays TypeError:Error#1010:术语未定义且没有属性。成功删除对象的问题

Arrays TypeError:Error#1010:术语未定义且没有属性。成功删除对象的问题,arrays,actionscript-3,removechild,addchild,array-splice,Arrays,Actionscript 3,Removechild,Addchild,Array Splice,我正在尝试制作一个游戏,涉及一个燃烧龙的小骑士,相当简单,但我是AS3新手,似乎无法解决这个问题,有时当我杀死一个骑士时,它会返回一个输出错误,说: TypeError:Error#1010:术语未定义且没有属性。 在drogtor/onTick() 我在这个网站的其他地方找不到任何相关的解决方案,所以我自己提交了一个问题 这是(我认为是)相关的代码 package { import flash.display.MovieClip; import flash.events.Event; i

我正在尝试制作一个游戏,涉及一个燃烧龙的小骑士,相当简单,但我是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;
            }
        }
    }
}

}
包
{
导入flash.display.MovieClip;
导入flash.events.Event;
导入flash.events.KeyboardEvent;
全球进口;
导入flash.display.DisplayObject;
公共类drogtor扩展MovieClip
{
private var updown:Boolean=true;
专用var-fArray:阵列;
私有变量耳环:数组;
var wpressed:Boolean=false;
var apressed:Boolean=false;
var dpressed:Boolean=false;
var spressed:Boolean=false;
var kspawn:编号=5;
公共函数drogtor()
{
addEventListener(Event.ENTER_FRAME,onTick);
stage.addEventListener(KeyboardEvent.KEY_DOWN,fly);
stage.addEventListener(KeyboardEvent.KEY\u UP,fly);
fArray=新数组();
Array=新数组();
}
公共功能点击(e:事件):无效
{
var fcount:int=0;
变量sdargon:int=10;
var rdargon:int=6;
变量角度:数字=(2*Math.PI*(dargon.rotation/360));
变量dy:Number=sdargon*Math.cos(角度);
变量dx:Number=sdargon*Math.sin(角度);
HitBox.x=dargon.x;
HitBox.y=dargon.y;
HitBox.rotation=dargon.rotation;
//火焰喷射器
if(全局计数==9)
{
var fAngle:Number=(2*Math.PI*(dargon.rotation/360));
变量fdy:Number=10*Math.cos(方格);
变量fdx:Number=10*Math.sin(方格);
var ftemp:火焰=新火焰;
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)
如果(kgen==1)
{
if(Math.floor((Math.random()*100)+1)=0;iKl--)
{
变量krotion:Number=(Math.atan2(array[iKl].y-dargon.y,array[iKl].x-dargon.x)*180/Math.PI)-90;
耳环[iKl]。旋转=krotation
var kangle:Number=(2*Math.PI*(array[iKl].rotation/360));
var edx:Number=3*Math.sin(康乐);
变量edy:Number=3*Math.cos(康乐);
耳环[iKl].x+=edx;
耳环[iKl].y-=edy;
if(array[iKl].hitTestObject(HitBox))
{
removeChild(耳环[iKl]);
耳环拼接(iKl,1);
}
对于(变量iF:int=fArray.length-1;iF>=0;iF--)
{
if(array[iKl].hitTestObject(fArray[if]))
{
removeChild(耳环[iKl]);
耳环拼接(iKl,1);
kspawn+=0.5
}
}
}
对于(变量iFl:int=fArray.length-1;iFl>=0;iFl--)
{
if(法拉利[iFl].currentFrame==法拉利[iFl].totalFrames)
{
removeChild(fArray[iFl]);
fArray[iFl]=null;
远射线拼接(iFl,1);
}
}
如果(向上向下)
{
达贡旋转x-=1;
if(dargon.rotationX==-10)
{
向上向下=错误;
}
}
如果(!向上向下)
{
dargon.旋转X+=1;
if(dargon.rotationX==10)
{
向上向下=真;
}
}
//运动
如果(wpressed)
{
dargon.x+=dx;
y-=dy;
}
如果(已发布)
{
达贡旋转-=RdAr;
}
如果(D)
{
dargon.旋转+=RdAr;
}
如果(已存储)
{
dargon.x-=((1/4)*dx);
暗多边形y+=((1/4)*dy)
}
}
公共功能漏洞(ke:KeyboardEvent):无效
{
如果(ke.type==“keyDown”)
{
//键=A
如果(ke.keyCode==87)
{
wpressed=真;
}
//键=A
如果(ke.keyCode==65)
{
apressed=true;
}
//键=D
如果(ke.keyCode==68)
{
dpressed=true;
}
如果(ke.keyCode==83)
{
spressed=true;
}
}
如果(ke.type==“keyUp”)
{
//键=A
如果(ke.keyCode==87)
{
wpressed=假;
}
//键=A
如果(ke.keyCode==65)
{
apressed=false;
}
//键=D
如果(ke.keyCode==68)
{
dpressed=假;
}
如果(ke.keyCode==83)
{
spressed=false;
}
}
}
}
}

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

编辑:
每当你为一个实例设置空值(
myInstance=null
)时,你就不能再访问它的属性、函数等。如果你尝试了,就会出现上面的错误。要避免它,请检查你的对象是否为空

if(myInstance != null) {
    //do your stuff with your instance
}

抱歉,新加入AS3,但具体如何