我正在为我教的一个高中班级写一些游戏设计教程,在我用来教和学的几个不同的文件中,我总是纠结于相同的问题。
错误(我确实搜索了这个)是2025“必须是调用者的子级”错误。为了更好地理解这一点,我创建了一个文件,如下所示。我要说明的是,这是一个基于.fla的框架代码,其中我们所做的其他工作是在一个.as文件中。无论如何:
fireButton.addEventListener(MouseEvent.CLICK, fire_fn);
addEventListener(Event.ENTER_FRAME, moveShots);
var speed:int = 20;
var shot:Shot;
var shots:Array=new Array;
function fire_fn(e:Event) {
shot = new Shot();
shot.x = gun.x+shot.width;
shot.y = gun.y;
addChild(shot);
shots.push(shot);
}
function moveShots(e:Event) {
for(var i:int=shots.length-1; i>=0; i--) {
shots[i].x += speed;
if(shots[i].x > stage.stageWidth -50) {
removeChild(shots[i]);
}
}
}
我知道问题出在removeChild这一行,但我不清楚应该如何编写它,或者(可能更重要的是)为什么要编写它。欢迎任何意见。
发布于 2013-04-23 17:35:08
您不能从数组中删除快照。因此,在下一次循环中,将再次满足该条件,但该镜头将已被移除。你需要拼接镜头阵列中的镜头;
试试这个:
function moveShots(e:Event) {
for(var i:int=shots.length-1; i>=0; i--) {
shots[i].x += speed;
if(shots[i].x > stage.stageWidth -50) {
removeChild(shots[i]);
shots.splice(i,1);
}
}
}
发布于 2013-04-23 17:37:34
首先,你应该做一些错误处理。若要从父项中删除子项,子项必须实际是该父项的子项。国家不能把被绑架的孩子从真正的父母身边夺走,只有绑架者(这是个可怕的类比,但这是有道理的)。
所以..。
if ( shots[i] is DisplayObject && ( shots[i] as DisplayObject ).parent == this ) {
this.removeChild( shots[i] );
}
这将确保该子对象实际上是一个DisplayObject,并且它的父对象就是您将要从其中删除它的对象。但这并不是真正导致你的问题的原因。删除子项后,还需要将其从数组中删除。
if ( shots[i] is DisplayObject && ( shots[i] as DisplayObject ).parent == this ) {
this.removeChild( shots[i] );
shots.splice( i, 1 );
}
https://stackoverflow.com/questions/16175562
复制相似问题