0

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

另外,我不确定它是否会有所不同,但有时当我添加孩子的东西时,我不会特意把它添加到舞台上......就像我会做的几个按钮一样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: Error #2006: The provided index is out of bounds。

此外,我觉得不使用 while 循环可以更快地执行此操作,但也许不是。请帮忙,谢谢!

4

1 回答 1

1

如果您想向舞台上的每个孩子讲话,那么您需要遍历他们。正如切尔尼夫所说,更改您的getChildAt调用使用numberChildren-1应该可以解决您的错误。

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

但是...
在您的特定情况下,您似乎只想以相同的速度在相同的方向上同时摇动屏幕上的所有内容。在这种情况下,我可能只是将所有对象添加到舞台上的单个容器 Sprite 中。然后,当你想做一个抖动效果时,你只需要移动那个容器对象,所有的东西都会一起移动。

于 2013-09-24T19:26:14.013 回答