Arrays TypeError:Error#1010:术语未定义且没有属性。成功删除对象的问题
我正在尝试制作一个游戏,涉及一个燃烧龙的小骑士,相当简单,但我是AS3新手,似乎无法解决这个问题,有时当我杀死一个骑士时,它会返回一个输出错误,说: TypeError:Error#1010:术语未定义且没有属性。 在drogtor/onTick() 我在这个网站的其他地方找不到任何相关的解决方案,所以我自己提交了一个问题 这是(我认为是)相关的代码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
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,但具体如何