【问题标题】:Jumping back and forth inside a Movieclip with a button?用按钮在影片剪辑中来回跳跃?
【发布时间】:2018-06-28 07:53:48
【问题描述】:

所以,我是 AS3 的初学者。我一直在阅读和弄清楚事情,尽管我无法理解这一点。

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

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

【问题讨论】:

  • 你不能访问在当前帧没有实例的任何东西。您无法在另一帧处理 MovieClip,因为它不存在。然后,您可以创建一个变量 var BCframe:int = 2; 然后在 BC 的第一帧中对其进行寻址: gotoAndStop((parent.parent as MovieClip) .BCframe); 因此,当任何 BC 出现时,它都会处理您的主要时间线并确定要转到的正确帧。

标签: actionscript-3 flash actionscript movieclip


【解决方案1】:

您应该可以通过给它们所有相同的实例名称来做到这一点(只要屏幕上一次只有一个)。

假设您有一个跨越所有 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(s) 的时间线上,输入以下代码:

//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();

【讨论】:

  • 它适用于第一帧,但是当我使用按钮进入下一帧,即第 2 帧时,(它现在已停用,点不存在)当我单击 navBtn 时在第 2 帧再次激活它,它只显示一秒钟,然后消失。如果我再次单击它,它会给我这个错误。 无法访问空对象引用的属性或方法。
  • 您需要更新您的问题以包含您拥有的相关代码以获得进一步的帮助。在您发表此评论的同时,我确实更新了我的问题,并以另一种可能回答您的问题的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
  • 2011-12-29
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多