0

我很抱歉这个问题是多么令人困惑。

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

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 帧“front”,我们看到汽车的前侧,然后我尝试再次将颜色更改应用到汽车前部的车身。我得到错误:

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

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

4

1 回答 1

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;
}
于 2012-06-06T06:09:39.430 回答