typeError:错误#1006:setChildIndex不是函数

时间:2014-03-13 02:38:43

标签: actionscript-3 flash

你知道导致这个错误的原因吗? TypeError:错误#1006:setChildIndex不是函数。     在Function /()[iVision_Game_fla.MainTimeline :: frame83:151]

这是我认为错误发生的地方......

function dragObject(indx1:int,indx2:int):Function { 
return function(event:MouseEvent){
var item:MovieClip=MovieClip(event.currentTarget); 
item.startDrag(); 
var topPos:uint=this.numChildren-1; 
var itemSound:Sound = new Sound();
itemSound.load(new URLRequest("sounds/"+dirArray[indx1])+indx2+".mp3"));
if(!activeSound)
{
    itemSound.play();
    activeSound=true;
}
this.setChildIndex(item, topPos);
}

}

//在另一个函数上调用它

var functionOnDrag:Function = dragObject(indexc[count-1],index[count2]);
pb[i].addEventListener(MouseEvent.MOUSE_DOWN,functionOnDrag);

2 个答案:

答案 0 :(得分:0)

我认为范围是这里的问题。如果项目的父项未更改,则可以使用item.parent.setChildIndex(item,topPos)

此外,在此之前,topPos:uint = item.parent.numChildren -1;

更新

要进一步调试,请在setChildIndex(151)的行上放置一个断点。 (添加一个断点:点击行号的左侧。它会添加一个小红圈。当代码在调试模式下点击时,它将停止。)

enter image description here 然后转到Debug - >调试电影 - >调试

当它停止时,打开调试面板:Window-> Debug Panels-> Variables,Window-> Debug Panels-> Callstack

在变量面板中,您应该看到范围中的所有当前变量。您正在寻找的是调用setChildIndex的对象的问题。在这种情况下,项目的父项。你可以深入了解它是什么。它应该是DisplayObjectContainer(MovieClip,Sprite等...)。项目来自事件,所以我也会检查event.currentTarget。您基本上是在确认在该断点处,item存在,它有一个父节点,它的父节点是DisplayObjectController。如果其中一个不正确,您可以从这里向后追踪为什么不是这种情况。

答案 1 :(得分:0)

  

TypeError:错误#1006:setChildIndex不是函数

您已经创建了匿名函数,如果您想要捕获this,您可以进行这样的构建:

var selfRef:MyClass = this;

现在您的MouseEvent处理程序将显示:

function dragObject(indx1:int, indx2:int):Function {
    return function (event:MouseEvent) {
        //Your code
        selfRef.setChildIndex(item, topPos);
    }
}