as3 - 如何将变量组合成一个变量?

时间:2015-08-20 12:28:50

标签: actionscript-3

我有多个具有相同效果的变量,并且不需要再次写入5次。

如何将所有这些变量合并为一个?

我们说我有block0,block1,block3

我希望他们都能做同样的事情,这样我就不需要多次写它了?

例如:

if hittest wall
{
 block0.x -= 5;
 block1.x -= 5;
 block2.x -= 5;
}

我想要的是什么:

if hittest wall
{
 blocksack.x -= 5;
}

2 个答案:

答案 0 :(得分:1)

看起来这些都是DisplayObject s。

要对DisplayObject进行分组,请将其添加到DisplayObjectContainer

var blockContainer:Sprite = new Sprite();
blockContainer.addChild(block0);
blockContainer.addChild(block1);
blockContainer.addChild(block2);
addChild(blockContainer);

现在你可以通过移动容器来移动所有容器:

blockContainer.x -= 5;

您的代码还有另一个问题。看起来您在末尾使用带有数字的变量名来区分它们。这是一个不好的做法。

  • 如果你从来没有给过几十个对象个人名字,这很乏味 希望与他们分别互动。
  • 它也容易出错并且不灵活。如果要添加更多块, 您使用的最后一个号码是什么,所以您不使用两次号码? 如果你想删除20个前3个块,你会重命名怎么办? 其余的从0开始?

拥有所有这些变量是您的实际问题。

它们应该从头开始分组。由于您显然是手工放置块,因此一个简单的解决方案就是使用容器。

将所有块放在空容器中,而不给它们实例名称。 然后使用DisplayObjectContainer的方法,即numChildrengetChildAt()将其所有子项放入数组中。然后,您可以迭代数组以根据需要对其所有元素应用某些操作,但同样,为了更改.x属性,只需移动容器即可。

答案 1 :(得分:0)

您可以编写一个单独的函数,而不是为每个对象执行移动。例如

private function moveAllBlocks(dist:Number):void {
  block0.x -= dist;
  block1.x -= dist;
  block2.x -= dist;
}

然后你可以通过调用

从任何地方调用该函数
moveAllBlocks(5);