2011-11-29 14 views
1

タイムラインスクラバーを作成しました。それは働いていますが、私はいくつかの問題に直面しています。トラックの終わりに私をクリックするとtimelineScrubber issue

  1. 、スクラバーが行くと、スライダートラックの終わりで停止ではなく、それはトラックの終わりに行く必要があり、その後、アニメーションやリプレイのアニメーションを開始するためにジャンプします。
  2. スクラバーがスムーズに動かない。それはちょっとしたことです。それは自由に動かない。

誰かが見たい場合に備えて、私はflaファイルを添付しました。リンクはhttp://www.mediafire.com/?cyk84zf0ndq6rです。誰かが私がどこに間違っているか教えてもらえますか?

import flash.geom.Rectangle; 
import flash.events.MouseEvent; 

var barLength : Number = slider_mc.bar.width - slider_mc.scrub.width; 
var rect : Rectangle = new Rectangle (slider_mc.bar.x, slider_mc.scrub.y, barLength, 0); 
var moviePlaying:Boolean = true; 

slider_mc.scrub.buttonMode = true; 
slider_mc.scrub.addEventListener(MouseEvent.MOUSE_DOWN, this.scrubMouseDownHandler); 

function scrubMouseDownHandler (event : MouseEvent) : void { 
    this.addEventListener("enterFrame",onEnterFrame);  
    slider_mc.scrub.addEventListener (MouseEvent.MOUSE_MOVE, this.scrubMouseMoveHandler); 
    slider_mc.scrub.addEventListener(MouseEvent.MOUSE_UP, this.scrubRemoveListenerHandler); 
    slider_mc.scrub.addEventListener(MouseEvent.MOUSE_OUT, this.scrubRemoveListenerHandler); 
    slider_mc.scrub.startDrag (false, rect); 
} 

function scrubMouseMoveHandler (event : MouseEvent) : void { 
    var spanPercentage : Number = (slider_mc.scrub.x - slider_mc.bar.x)/barLength; 
    var framePosition : int = int (animationMc.totalFrames * spanPercentage); 
    if (framePosition < 1) framePosition = 1 ;   
    slider_mc.bar.sliderFill_mc.scaleX = ((440/animationMc.totalFrames) * animationMc.currentFrame); 
    //trace (framePosition); 
    if (moviePlaying==true) { 
    animationMc.gotoAndPlay(framePosition); 
    //moviePlaying = false; 
    } else if(moviePlaying==false) { 
    animationMc.gotoAndStop(framePosition); 
    } 
} 

function scrubRemoveListenerHandler (event : MouseEvent) : void { 
    slider_mc.scrub.removeEventListener (MouseEvent.MOUSE_MOVE, this.scrubMouseMoveHandler); 
    slider_mc.scrub.removeEventListener(MouseEvent.MOUSE_UP, this.scrubRemoveListenerHandler); 
    slider_mc.scrub.removeEventListener (MouseEvent.MOUSE_OUT, this.scrubRemoveListenerHandler); 
    slider_mc.scrub.stopDrag(); 
} 

slider_mc.bar.sliderFill_mc.width = 0; 
this.addEventListener("enterFrame",onEnterFrame); 

function onEnterFrame(e:Event) { 
    //By default scrub keeps on moving along with animation at the start of swf, when it is published 
    //sl.value = this.currentFrame; 
    slider_mc.scrub.x = Math.floor((barLength/animationMc.totalFrames) * animationMc.currentFrame); 

    //it causes fill to scale along with scrub 
    slider_mc.bar.sliderFill_mc.scaleX((440/animationMc.totalFrames) * animationMc.currentFrame); 


    /////CURRENT TIME/// 
    var currentSeconds = Math.floor(animationMc.currentFrame/24); 
    var CurrentInput = currentSeconds; 

    var timeElapsed = (CurrentInput > 3600 ? Math.floor(CurrentInput/3600) + ':':'') //hours 
    +(CurrentInput%3600 < 600 ? '0':'')+Math.floor(CurrentInput%3600/60)+':' //minutes 
    +(CurrentInput%60 < 10 ? '0':'')+CurrentInput%60; //seconds 

    //trace(timeElapsed); 
    currentTime.text = timeElapsed; 
} 


pause_btn.addEventListener(MouseEvent.CLICK, pauseAnim); 
function pauseAnim(event:MouseEvent):void { 
    //this.removeEventListener("enterFrame",onEnterFrame); 
    moviePlaying = false; 
    animationMc.stop(); 
} 

play_btn.addEventListener(MouseEvent.CLICK, playAnim); 
function playAnim(event:MouseEvent):void{ 
    this.addEventListener("enterFrame",onEnterFrame); 
    moviePlaying = true; 
    animationMc.play(); 
} 

slider_mc.buttonMode = true; 
slider_mc.useHandCursor = true; 

slider_mc.bar.addEventListener(MouseEvent.CLICK, snapTo); 
function snapTo(event:MouseEvent) { 
    slider_mc.scrub.x = mouseX; 
    //slider_mc.bar.sliderFill_mc.scaleX =((440/animationMc.totalFrames) * animationMc.currentFrame); 

    var spanPercentage : Number = (slider_mc.scrub.x - slider_mc.bar.x)/barLength; 
    var framePosition : int = int (animationMc.totalFrames * spanPercentage); 
    slider_mc.bar.sliderFill_mc.scaleX =((440/animationMc.totalFrames) * animationMc.currentFrame); 

    //trace (framePosition); 

    if (moviePlaying==true) { 
    animationMc.gotoAndPlay(framePosition); 
    //moviePlaying = false; 
    } else if(moviePlaying==false) { 
    animationMc.gotoAndStop(framePosition); 
    } 
} 

///better because it gives to leading zeros/////////// 
//TOTAL TIME/// 
var totalSeconds = Math.floor(animationMc.totalFrames/24); 
var input = totalSeconds; 

var totalAnimTime = (input > 3600 ? Math.floor(input/3600) + ':':'') //hours 
    + (input%3600 < 600 ? '0':'') + Math.floor(input%3600/60)+':' //minutes 
    + (input%60 < 10 ? '0':'') + input%60; //seconds 

//trace(totalAnimTime); 
totaltime.text = "/"+totalAnimTime; 

答えて

0
  1. 問題は、あなたが終了間近にクリックした場合、それはあなたのanimationMcのフレームよりも大きいframePositionを与える数> 1とすることができるライン106の近くに、あなたのspanPercentage計算です。

再生ヘッドをフレーム数を超えて移動することはできないため、最初のフレームに戻ります。

spanPercentage> 1の場合、spanPercentage = 1にすばやく修正します。関連する行は以下のとおりです。

function snapTo (event:MouseEvent){ 

    slider_mc.scrub.x = mouseX; 
    //trace("mouseX: "+root.mouseX , slider_mc.scrub.x); 
    trace("animationMc.currentFrame: "+ Math.floor((barLength/animationMc.totalFrames)* animationMc.currentFrame)); 

    //slider_mc.bar.sliderFill_mc.scaleX=((440/animationMc.totalFrames)*animationMc.currentFrame); 

    var spanPercentage : Number = (slider_mc.scrub.x - slider_mc.bar.x)/barLength; 
    trace("spanPercentage: " +spanPercentage); 
    if(spanPercentage > 1){ 
     spanPercentage = 1; 
    } 
    var framePosition : int = int (animationMc.totalFrames * spanPercentage); 

    slider_mc.bar.sliderFill_mc.scaleX=((440/animationMc.totalFrames)*animationMc.currentFrame) 
    //trace (framePosition); 



    if (moviePlaying==true){ 
     animationMc.gotoAndPlay(framePosition); 
     //moviePlaying = false; 
    } 
    else if(moviePlaying==false) { 
     animationMc.gotoAndStop(framePosition); 
    } 

} 
  1. あなたslider_mcインスタンスはそれにそれを返す440から574 にステージ上で延伸し、440個のピクセルの適切なサイズは、幅の広いあなたのファンキーなスクラバーを修正しています。

はアクションとダウンロードにそれをチェックアウト: http://micromedia.vaniercollege.qc.ca/home/nortonb/2011-12/flash2/stackoverflow/scrubber.htm

+0

はありがとうございました。あなたは間違いなく私が言及した最初の問題を解決しました。もはやアニメーションを飛ばしたり再生したりすることはありません。私は第二の問題をどのように克服することができるかを提案できますか?スクラバーをドラッグしようとすると、途中で落ちます。私はスクラバーを1つのトラックの長さ全体をドラッグすることができません –

+0

私は非常に興奮しています。ここで何度も質問を投稿しましたが、私の問題が部分的に解決されたのは初めてです。もう一度soooに感謝します。 –

+0

hi Sanjay。私は2番目の問題を解決したと思っていましたが、戻ってきて、スクラバーをドラッグしてテストしていないことを確認して、バーをクリックしてみてください。まだ解決していませんが、問題はドラッグをオーバーライドしないようにonEnterFrameイベントを無効にすることに関連しています。あなたが私にあなたのためにそれをしてもらいたいかどうか私に教えてください。 –