AS3一个MC中的多个实例名称

时间:2012-06-06 05:44:58

标签: actionscript-3 animation multiple-instances

我为这个问题多么令人困惑道歉。

我有一个汽车电影剪辑。在汽车电影剪辑中,汽车有四个不同的角度。 (例如左,右,前后)。我动态地改变了汽车的车身颜色。在汽车的每个角度,汽车车身都有一个实例名称“车身”。我用代码更改颜色:

var tempcar = "car_mc" + i;
var myNewTransform = new ColorTransform();
myNewTransform.color = 0x000000 //in real life this is a random value
this[tempcar].body.transform.colorTransform = myNewTransform;

一切正常,直到我告诉汽车电影剪辑gotoAndPlay框架“前面”,我们看到汽车的正面,我尝试再次将颜色变化应用到汽车前部的车身。我收到错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference.

有没有更好的方法来做我想做的事情?

1 个答案:

答案 0 :(得分:0)

这是处理事物的 ActionScript 2方式。在ActionScript中,容器并不总是MovieClip,除了用于访问动态字段的哈希之外。此外,如果您通过addChild将其添加到显示列表中,结果也会有所不同,因为ActionScript 3中的情况并非如此,它可以自动处理子项。

您应该使用Array来存储和访问动态创建的实例。

// clazz would be the symbol
function createInstance(container:DisplayObjectContainer, clazz:Class, list:Array):Sprite
{
  const child:MovieClip = new clazz() as MovieClip;
  if (!child) throw new ArgumentError("Wrong type given");

  return list[list.length] = container.addChild(child);
}

function getInstanceAt(index:int, list:Array):Sprite
{
  return list[index] as Sprite;
}