2011-02-11 7 views
1

我想删除我动态创建的影片剪辑,当出口出现错误删除动态添加的影片剪辑使用removeChild之(未定义的属性错误)

1120:未定义的属性player_mc的访问

function addplayer(id:String):MovieClip { 
    var mcObj:Object=null; 
    mcObj=getDefinitionByName(id.toString()); 
    return (new mcObj()) as MovieClip; 
} 
// this creates the mc 
function startplayer():void { 
    var player_mc:MovieClip = addplayer("s"+station.value); 
    addChild(player_mc) 
} 
// this is supposed to remove it 
function stopplayer():void { 
    //the following line causes the error 
    removeChild(player_mc); 
} 

正如你可以看到我使用addChild在我的库中影片剪辑,这可能是库项目与类名S1,S2,S3 ...

我尝试使用removechild(getchildbyname(?????));没有成功。我如何简单地删除导出时不存在的影片剪辑?

回答

2

如果您不想声明player_mc作为全局变量,并且它是总是最后一个孩子可以使用removeChildAt(numChildren - 1)

0

尝试将player_mc声明为代码顶部的“全局变量”,而不是在函数startplayer()中声明。比它应该是内部stoporch访问()

var player_mc:MovieClip; 

function addplayer(id:String):MovieClip { 
    var mcObj:Object=null; 
    mcObj=getDefinitionByName(id.toString()); 
    return (new mcObj()) as MovieClip; 
} 
//this creates the mc 
function startplayer():void { 
    player_mc = addplayer("s"+station.value); 
    addChild(player_mc) 
} 
//this is supposed to remove it 
function stoporch():void { 
    //the following line causes the error 
    removeChild(player_mc); 
} 
0

stoporch函数引用变量player_mc不在范围之内。它被定义为startplayer中的本地。

你要么需要保存在某个地方的引用,stoporch可以看到它,或者在您添加它,然后用getChildByName,当你删除它的name财产。

0

您的player_mc变量在本地定义,这意味着当函数startplayer()完成时它将消失。

您可以创建功能类变量外:

private var _player_mc : MovieClip; 

,并在函数中这样创造的:

_player_mc = addplayer("s"+station.value); 

删除它,只需使用:

removeChild(_player_mc); 
0

有几个选项。像其他人所说的那样,在课堂上创建变量是可行的。另一种方法是在制作后为剪辑分配名称。

function startplayer():void { 
    player_mc = addplayer("s"+station.value); 
    player_mc.name = "playerMC"; 
    addChild(player_mc) 
    removeChild(this.getChildByName("playerMC")); 
}