让所有孩子做点什么......?

时间:2013-09-24 17:56:06

标签: actionscript-3 children

我想知道是否有一种简单的方法让所有孩子同时做某事。特别是,我希望舞台上的一切都像地震一样来回摇摆。在舞台上挑出一切并添加正确的代码有点困难,因为在给定的时间我并不总是知道舞台上的孩子数量。

另外,我不确定它是否会有所作为,但有时候当我添加一些东西时,我不会不自觉地将它添加到舞台上...就像几个按钮我会做的this.addChild(mybutton)。我不知道是否有办法访问addChilded的所有东西,即使我可能没有将它们直接添加到舞台上?我很确定numChildren会返回屏幕上对象数量的值,但我可能错了......

我在考虑做类似

的事情

在我的圈内

if (numChildren >= 10 && nukeShakeTimer.currentCount == 0)
{
    nukeShakeTimer.start();
}
if (nukeShakeTimer.currentCount > 0)
{
    NukeShake();
}

NukeShake

    public function NukeShake():void
    {
        numberChildren = numChildren;
        trace(numberChildren);
        while (numberChildren > 0)
        {
            var tempObject:Object = getChildAt(numberChildren)
            if (nukeShakeTimer.currentCount % 2 == 1)
            {
                tempObject.x += 10;
            }
            if (nukeShakeTimer.currentCount % 2 == 0)
            {
                tempObject.x -= 10;
            }
            numberChildren -= 1;
        }
        if (nukeShakeTimer.currentCount > 30)
        {
            nukeShakeTimer.reset();
        }
    }

当我尝试这个时,我得到行var tempObject:Object = getChildAt(numberChildren)的运行时错误,错误读取 RangeError:错误#2006:提供的索引超出范围。

此外,我觉得可以在不使用while循环的情况下更快地完成此操作,但也许不行。请帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

如果您想解决舞台上的每个孩子,那么您需要循环播放它们。正如切尔尼夫所说,将getChildAt来电更改为使用numberChildren-1可以解决您的错误。

无论一切是否直接在舞台上都无关紧要。通过舞台循环,孩子们将获得您添加对象的任何容器。移动那个容器也会移动它的孩子。 (如果你需要独立移动这些孩子,你将不得不做更多的工作。)

<强>可是...
在您的具体情况下,看起来您只是想要以相同的速率在同一方向上一起摇动屏幕上的所有内容。在这种情况下,我可能只是将我的所有对象添加到舞台上的单个容器Sprite中。然后,当你想要做一个摇动效果时,你只需要移动那个容器对象,一切都会一起移动。