无法在 Button AS3 中引用 MovieClip

Unable to reference MovieClip inside Button AS3

我有一个恼人的问题,希望有人能帮助我解决。

我创建了一个静音按钮,并且在该按钮内有另一个动画片段。我想要它做的就是当我切换静音时,里面的动画片段将转到相应的帧。

但是,每次我尝试调用按钮内的动画片段时,都会出现此错误:

Access of possibly undefined property mcMuteToggle through a reference with static type flash.display:SimpleButton.

其中的动画片段的实例名称是 "mcMuteToggle"。

这可能是由于严格模式。您可以在 ActionScript 设置对话框中禁用它,使用不同的语法 myButton['mcMuteToggle'] 访问它,或者为包含 属性 mcMuteToggle.[= 的符号创建 class 13=]

您还可以检查以确保符号确实在舞台上并且该剪辑确实在按钮中:

if('myButton' in root) { 
    // ...
}

if('mcMuteToggle' in myButton) { 
    // ...
}

我想你只是覆盖了那些代码。你可以使用这样的东西:

 var soundOpen:Boolean = true;
    var mySound:Sound = new Sound(new URLRequest("Whatever your sound is"));
    var mySc:SoundChannel = new SoundChannel();
    var mySt:SoundTransform = new SoundTransform();
    mySc = mySound.play();

    mcMuteToggle.addEventListener(MouseEvent.CLICK, muteOpenSound);

    function muteOpenSound(e:MouseEvent):void
    {
        if(soundOpen == true)
        {
            mcMuteToggle.gotoAndStop(2);
/*on frame 2 u need to hold ur soundClose buton so ppl can see :)*/
            soundOpen = false;
            mySt.volume = 0;
            mySc.soundTransfrom = st;
        }
        else
        {
            mcMuteToggle.gotoAndStop(1);
            soundOpen = true;
            mySt.volume = 1;
            mySc.soundTransfrom = st;
        }
    }

这每次都对我有用。希望你能用好它;)

为什么不制作像按钮一样的影片剪辑??因为我不认为实际的 button (simpleButton) 类型可以处理子 MovieClip(特别是如果它们也有代码)。即使可能不这样做,我也可以预测 Button 会根据您在这些 MClip 中的代码来做它不应该做的事情。

尝试另一种按钮方法,仅用于测试...您没有显示任何可用的测试代码,所以我会做出假设...

1) 制作一个形状(矩形?)并转换为 MovieClip(或者如果全部编码,则 addchild 形状为新的 MovieClip)。假设您将其命名为 mc_testBtn.

2) 通过编码使该 MC 可点击 mc_testBtn.buttonMode = true;

3) 在 mc_testBtn
中添加你的 mcMuteToggle (或通过代码:mc_testBtn.addChild(mcMuteToggle);

现在您可以尝试类似...

mc_testBtn.addEventListener (MouseEvent.CLICK, toggle_Mute );

function toggle_Mute (evt:MouseEvent) : void
{
    if ( whatever condition )
    {
        mc_testBtn.mcMuteToggle.gotoAndStop(2); //go frame 2
    }
    else
    {
        mc_testBtn.mcMuteToggle.gotoAndStop(1); //go frame 1
    }
}