利用递归控制所有的对象

      AS程序设计 2004-11-20 8:50
利用第归控制所有的对象
偶然的机会看见luar写的书中有一节是介绍,在游戏中需要暂停控制所有的对象的方法,那是在他的第一本书中,他是这样的写的,是在flash MX as1.0环境下
MovieClip.prototype.stopAll=function()
{
    for(var i in this)
    {
        this[i].stop()
    }
}

在主时间轴的一个按钮上加上如下代码:
btn.onRelease=function()
{
    stopAll()
}

其实他是省略了_root,
完整的应该如下
btn.onRelease=function()
{
    _root.stopAll()
}
但是这样也不是完全暂停,只是暂停了_root对象中最上层的MC,但是MC中又有MC就不能控制了。
下面我用递归的方法实现所有的MC暂停
MovieClip.prototype.stopAll=function()
{
    for(var i in this)
    {
        this[i].stop()
        this[i].stopAll()
    }
}
就是在一行this[i].stopAll()就OK了,这就是用了递归方法。
继续
MovieClip.prototype.playAll=function()
{
    for(var i in this)
    {
        this[i].play()
        this[i].playAll()
    }
}
这样在游戏中就会让所有的MC暂停和播放了
在as2.0中怎么实现呢
看下面代码
class CtrlAll
{
    public static function stopAll(mc:MovieClip)
    {
        for(var i in mc)
        {
            mc[i].stop()
            CtrlAll.stopAll(mc[i])
        }
    }
    public static function playAll(mc:MovieClip)
    {
        for(var i in mc)
        {
            mc[i].play()
            CtrlAll.playAll(mc[i])
        }
    }
}
我写了个静态类,把MC对象用参数传进去就OK了。
如果你想暂停主时间轴上的所有MC,就这样用:CtrlAll.stopAll(_root)。
标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}