我设计了很长的flash电影,这是一个广告。
电影是在几个flash文件中设计的,每个文件都被合并为一个影片剪辑,然后所有的影片剪辑都被移动到主文档中。
每个影片剪辑都在一张幻灯片上。
它们播放,当剪辑到达结尾时,我使用了动作脚本root.gotoAndPlay(x)
,其中x
是序列中下一个剪辑的幻灯片编号,因此我的时间轴如下所示:
我需要添加一个带有四个按钮的控件功能:
我该怎么做?我只能在网上找到允许控制功能的资源,其中所有内容都在同一时间轴上,而不是用于控制影片剪辑。
我对动作脚本的经验很少,但在其他语言(JS和PHP)方面经验丰富。
答案 0 :(得分:1)
首先,为每个场景影片剪辑指定实例名称。使它成为可以解析的东西,例如“clip_1”,“clip_2”,“clip_3”等。
其次,在每个具有场景剪辑的帧上放置帧标签 - 命名与影片剪辑类似:“scene_1”,“scene_2”等。
现在,在主时间轴中创建一个新的actionscript图层,并确保其时间轴延伸到主时间轴的末尾。它会自动在第1帧中有一个空白的关键帧。
我们将创建一个变量来保存对当前正在播放的剪辑的引用:
var currentClip:MovieClip = null;
我们可以通过多种方式跟踪当前剪辑 - 如果您没有提前计划实施,那么所有这些方法在某些时候都很乏味。我打算尝试一下我认为你最容易实现的那个。
在动画片段所在的每个动作帧中,您将添加以下代码行:
currentClip = eval("clip_x");
您需要在每个帧的“clip_x”中更改x的值,以匹配帧中剪辑的编号。
现在,回到你创建的第二个动作层 - 我们将在这里处理rev,ff,play和pause动作。
function Play() : Void {
if(currentClip!=null && currentClip!=undefined) {
currentClip.play();
}
}
function Pause() : Void {
if(currentClip!=null && currentClip!=undefined) {
currentClip.stop();
}
}
好的,所以我们有游戏和停顿。如何处理FF和REV将取决于您希望用户如何与这些按钮进行交互。通常有两种方法:“跳转”和“扫描”。每次按下按钮时,“跳转”方法使播放头向前/向后移动预定数量的帧。只要按下按钮,“扫描”方法就会使播放头向前/向后移动X帧,其中X是电影的fps速率。
我认为Jump方法最容易实现:
var JUMP_RATE = 30; //这是每次点击ff或rev按钮时“跳”的帧数
function FF() : Void {
if(currentClip!=null && currentClip!=undefined) {
if(currentClip._currentFrame + JUMP_RATE < currentClip._totalFrames)
currentClip.gotoAndPlay(currentClip._currentFrame + JUMP_RATE);
else
currentClip.gotoAndStop(currentClip._totalFrames);
}
}
function REV() : Void {
if(currentClip!=null && currentClip!=undefined) {
if(currentClip._currentFrame - JUMP_RATE > 0)
currentClip.gotoAndPlay(currentClip._currentFrame - JUMP_RATE);
else
currentClip.gotoAndPlay(0);
}
}
现在剩下要做的就是创建按钮并将函数调用添加到他们的onPress或onRelease事件中。
祝你好运!