我为这个问题多么令人困惑道歉。
我有一个汽车电影剪辑。在汽车电影剪辑中,汽车有四个不同的角度。 (例如左,右,前后)。我动态地改变了汽车的车身颜色。在汽车的每个角度,汽车车身都有一个实例名称“车身”。我用代码更改颜色:
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.
有没有更好的方法来做我想做的事情?
答案 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;
}