反向/回放AS3时间轴

时间:2015-01-04 00:26:36

标签: actionscript-3 flash touch

我试图在Action Script 3中制作一个反向播放模块。我有一个200帧长的视频,我作为影片剪辑导入Flash。我命名影片剪辑并插入一些关键帧以使视频停在特定的帧上,使其成为3阶段动画。

每当我向右滑动/平移(检测到正x偏移)时,它会发出命令play();,影片剪辑将播放,直到找到停止。

我想要实现的是当我向左滑动(检测到负偏移)时,从当前帧向后播放直到上一个停止。(

我整理了滑动/触摸编程,而我所缺少的是向后位。我设法让它工作,倒退1个单帧,而不是在击中前一个停止帧之前存在的整个束。我的滑动和播放代码是这样的,包含单个prev帧,这使我只返回一帧而不是前一站之前的整个帧。

Multitouch.inputMode = MultitouchInputMode.GESTURE;
mymovieclip.stop();

mymovieclip.addEventListener(TransformGestureEvent.GESTURE_SWIPE , onSwipe); 

function onSwipe (e:TransformGestureEvent):void{
    if (e.offsetX == 1) { 
        //User swiped right
        mymovieclip.play();
    }
    if (e.offsetX == -1) { 
        //User swiped left
        mymovieclip.prevFrame();
    } 
}

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

import flash.events.Event;
import flash.display.MovieClip;

//note that this is not hoisted, it must appear before the call
MovieClip.prototype.playBackward = function():void {
    if(this.currentFrame > 1) {
        this.prevFrame();
        this.addEventListener(Event.ENTER_FRAME, playBackwardHandler);
    }
}

function playBackwardHandler(e:Event):void {
    var mc:MovieClip = e.currentTarget as MovieClip;
    if(mc.currentFrame > 1 && (!mc.currentFrameLabel || mc.currentFrameLabel.indexOf("stopFrame") == -1)) { //check whether the clip reached its beginning or the playhead is at a frame with a label that contains the string 'stopFrame'
        mc.prevFrame();
    }
    else {
        mc.removeEventListener(Event.ENTER_FRAME, playBackwardHandler);
    }
}

var clip:MovieClip = backMc; //some clip on the stage
clip.gotoAndStop(100); //send it to frame 100
clip.playBackward(); //play it backwards

现在你可以将'stopFrame'标签放到剪辑的时间轴上(stopFrame1,stopFrame2 ... stopFrameWhatever),剪辑应该停在那里直到再次调用playBackward。请注意,如果剪辑尚未到达stopFrame或其开头并且您想要从MovieClip API调用播放/停止,则应删除输入帧事件侦听器,否则可能会导致问题。