使用按钮在Movieclip中来回跳转?

时间:2018-01-19 05:52:11

标签: actionscript-3 flash actionscript movieclip

所以,我是AS3的初学者。我一直在阅读和弄清楚事情,虽然我无法绕过这个。

所以,我有4帧。每个帧都有一个不同的影片剪辑,MC1,MC2,MC3,MC4 在这四个影片剪辑中,有另一个影片剪辑,每个影片剪辑具有相同的实例名称:BC,并且在该影片剪辑中有两个帧。第1帧有一个点,而第2帧没有。 MC1> BC>(2帧) MC2> BC>(2帧) 等等....

我正在尝试做什么:我想看看是否有任何方法可以通过一个按钮同时控制所有四个MC剪辑中BC的帧导航。 我想在BC影片剪辑中的两个帧之间切换回第四个。 我很茫然,我尝试过很多东西。

1 个答案:

答案 0 :(得分:0)

你应该可以通过给他们所有相同的实例名称(只要一次只有一个在屏幕上)来实现这一目的。

因此,假设您有一个跨越所有4个帧且实例名称为navBtn的按钮,并且您为每个MC1-4剪辑指定了相同的实例名称MC。您可以在第1帧执行以下操作:

navBtn.addEventListener(MouseEvent.CLICK, navBtnClick);

function  navBtnClick(e:Event):void {
    if(MC.BC.currentFrame == 2){
        MC.BC.gotoAndStop(1);
    }else{
        MC.BC.gotoAndStop(2);
    }
}

再次阅读你的问题,也许正在寻找的是让每个片段在加载时自动转到BC孩子的同一帧?如果是这种情况,请按照@Organis对您的问题的评论中的示例进行操作。以下是一种可以实现此目的的方法:

在主时间轴的第一帧上创建两个变量:

var BC_NAV_CHANGE:String = "BC_NAV_CHANGE";
var BC_CurFrame:int = 1;

然后,当您需要更改BC对象的框架时,请执行以下操作:

//create a function that you call when you want to change the BC frame
function toggleBCFrame(e:Event = null){
    MovieClip(root).BC_CurFrame = MovieClip(root).BC_CurFrame == 1 ? 2 : 1;
    //the line above is a if/else shorthand, that is setting a new value to the `BC_CurFrame` var, 
    //if the current value is `1`, it will set it to `2`, otherwise it will set it to `1`

    MovieClip(root).dispatchEvent(new Event(MovieClip(root).BC_NAV_CHANGE));
    //this line (above) dispatches a event telling anything that's listening that the variable has changed
}

如果上面的代码位于主时间轴上,您可以放弃代码的所有MovieClip(root).部分。

现在,在BC MovieClip的时间轴上,输入以下代码:

//create a function that goes to and stops at the frame stored in the global variable
function updateFrame(e:Event = null){
    gotoAndStop(MovieClip(root).BC_CurFrame);
}

//next listen for the BC_NAV_CHANGE event, and call the above update function above any time that event happens
MovieClip(root).addEventListener(MovieClip(root).BC_NAV_CHANGE, updateFrame);

//lastly, call the update function right away so when the BC clips loads it immediately goes to the correct frame
updateFrame();