将实例名称作为函数中的字符串传递

时间:2016-04-28 19:57:32

标签: actionscript-3 air

我正在创建一个Adobe Air Desktop项目,该项目在MainTimeline中有许多MovieClip(RadioSel,CarMC1,CarMC2,CarMC3等)。 当您点击CarMC中的任何一个时,它会显示RadioSel(另一个动画片段)

function showRadio(event: MouseEvent) {
    RadioSel.visible = true;
    RadioSel.instance = event.currentTarget.name;
    trace (RadioSel.instance);
}

CarMC是具有许多帧的MovieClip。每个都显示不同的形状,取决于RadioSel选择。 RadioSel是一个MovieClip,它有多个单选按钮,每个按钮都将CarMC更改为不同的形状,而一个名为instance的var将点击的CarMC实例作为字符串

我在RadioSel内创建了一个函数(在radiobuttongroup更改时调用),它将点击的CarMC更改为指定的框架并隐藏RadioSel

function chooseCar(CarInstance: String, frame: Number) {
    this["Object(root)."+CarInstance].gotoAndStop(frame);
    this.visible = false;
    //trace(event.target)
}

当我更改RadioSel选项时,我称之为......

chooseCar(instance, frameNo)

...其中instanceCarMC的名称,而frameNo是由单击的单选按钮定义的数字,但每次调用时都会出错功能。我相信错误就在这一部分:

this["Object(root)."+CarInstance].gotoAndStop(frame);

我该如何解决?

1 个答案:

答案 0 :(得分:0)

您没有传递实例(movieclip),而是传递实例名称(字符串)。您应该通过汽车实例(movieClip)来简化操作 - 然后您不关心您的汽车在哪里以及如何访问它们:

function showRadio(event: MouseEvent) 
{
    RadioSel.visible = true;
    // I assume the currentTarget is your car you've clicked on
    // pass the movieclip instance to the radiosel and not just the name
    RadioSel.instance = event.currentTarget as MovieClip;
    trace (RadioSel.instance.name);
}

在你的RadioSel中:

public var instance:MovieClip;

// no need to pass the instance here as it is saved in the instance property anyway
function chooseCar(frame: Number) 
{
    instance.gotoAndStop(frame);
    this.visible = false;
}