2009-09-01 16 views
0

Flashを最後に使ったので、しばらくしてから、Actionscript 3を学ぶのが最善だと思っていました。しかし、私は[Flashビデオプレイヤーチュートリアル] [1]を手がかりにしています。私のニーズに合わせてレイアウトをカスタマイズしてください。Flash Actionscript 3.0 Videoplayerヘルプ

プログレスバーを13.9px右に55.8px移動しました。私はまた、プログレスバーを176.9pxに短縮しました。問題は、55.8pxで右に移動するスクラバーをクリックしたときです。スクラバーは55.8pxから始めるべきだと私は思う。誰かが自分のコードを見て、私が変更する必要があるものを提案してもらえますか?

種類よろしく、

マット

// ########################## 
// ############# CONSTANTS 
// ########################## 

// time to buffer for the video in sec. 
const BUFFER_TIME:Number    = 8; 
// start volume when initializing player 
const DEFAULT_VOLUME:Number    = 0.6; 
// update delay in milliseconds. 
const DISPLAY_TIMER_UPDATE_DELAY:int = 10; 
// smoothing for video. may slow down old computers 
const SMOOTHING:Boolean     = true; 

// ########################## 
// ############# VARIABLES 
// ########################## 

// flag for knowing if flv has been loaded 
var bolLoaded:Boolean     = false; 
// flag for volume scrubbing 
var bolVolumeScrub:Boolean    = false; 
// flag for progress scrubbing 
var bolProgressScrub:Boolean   = false; 
// holds the last used volume, but never 0 
var intLastVolume:Number    = DEFAULT_VOLUME; 
// net connection object for net stream 
var ncConnection:NetConnection; 
// net stream object 
var nsStream:NetStream; 
// object holds all meta data 
var objInfo:Object; 
// url to flv file 
var strSource:String     = "hancock-tsr2_h480p.flv"; 
// timer for updating player (progress, volume...) 
var tmrDisplay:Timer; 

// ########################## 
// ############# FUNCTIONS 
// ########################## 

// sets up the player 
function initVideoPlayer():void { 
    // hide buttons 
    mcVideoControls.btnUnmute.visible = false; 
    mcVideoControls.btnPause.visible = false; 

    // set the progress/preload fill width to 1 
    mcVideoControls.mcProgressFill.mcFillgreen.width = 1; 
    mcVideoControls.mcProgressFill.mcFillGrey.width = 1; 

    // add global event listener when mouse is released 
    stage.addEventListener(MouseEvent.MOUSE_UP, mouseReleased); 

    // add event listeners to all buttons 
    mcVideoControls.btnPause.addEventListener(MouseEvent.CLICK, pauseClicked); 
    mcVideoControls.btnPlay.addEventListener(MouseEvent.CLICK, playClicked); 
    mcVideoControls.btnStop.addEventListener(MouseEvent.CLICK, stopClicked); 
    mcVideoControls.btnMute.addEventListener(MouseEvent.CLICK, muteClicked); 
    mcVideoControls.btnUnmute.addEventListener(MouseEvent.CLICK, unmuteClicked); 
    mcVideoControls.mcVolumeScrubber.btnVolumeScrubber.addEventListener(MouseEvent.MOUSE_DOWN, volumeScrubberClicked); 
    mcVideoControls.mcProgressScrubber.btnProgressScrubber.addEventListener(MouseEvent.MOUSE_DOWN, progressScrubberClicked); 

    // create timer for updating all visual parts of player and add 
    // event listener 
    tmrDisplay = new Timer(DISPLAY_TIMER_UPDATE_DELAY); 
    tmrDisplay.addEventListener(TimerEvent.TIMER, updateDisplay); 

    // create a new net connection, add event listener and connect 
    // to null because we don't have a media server 
    ncConnection = new NetConnection(); 
    ncConnection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); 
    ncConnection.connect(null); 

    // create a new netstream with the net connection, add event 
    // listener, set client to this for handling meta data and 
    // set the buffer time to the value from the constant 
    nsStream = new NetStream(ncConnection); 
    nsStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); 
    nsStream.client = this; 
    nsStream.bufferTime = BUFFER_TIME; 

    // attach net stream to video object on the stage 
    vidDisplay.attachNetStream(nsStream); 
    // set the smoothing value from the constant 
    vidDisplay.smoothing = SMOOTHING; 

    // set default volume 
    mcVideoControls.mcVolumeScrubber.x = (52 * DEFAULT_VOLUME) + 341; 
    mcVideoControls.mcVolumeFill.mcFillgreen.width = mcVideoControls.mcVolumeScrubber.x - 394 + 52; 
    setVolume(DEFAULT_VOLUME); 
} 

function playClicked(e:MouseEvent):void { 
    // check's, if the flv has already begun 
    // to download. if so, resume playback, else 
    // load the file 
    if(!bolLoaded) { 
     nsStream.play(strSource); 
     bolLoaded = true; 
    } 
    else{ 
     nsStream.resume(); 
    } 

    // show video display 
    vidDisplay.visible     = true; 

    // switch play/pause visibility 
    mcVideoControls.btnPause.visible = true; 
    mcVideoControls.btnPlay.visible  = false; 
} 

function pauseClicked(e:MouseEvent):void { 
    // pause video 
    nsStream.pause(); 

    // switch play/pause visibility 
    mcVideoControls.btnPause.visible = false; 
    mcVideoControls.btnPlay.visible  = true; 
} 

function stopClicked(e:MouseEvent):void { 
    // calls stop function 
    stopVideoPlayer(); 
} 

function muteClicked(e:MouseEvent):void { 
    // set volume to 0 
    setVolume(0); 

    // update scrubber and fill position/width 
    mcVideoControls.mcVolumeScrubber.x    = 341; 
    mcVideoControls.mcVolumeFill.mcFillgreen.width = 1; 
} 

function unmuteClicked(e:MouseEvent):void { 
    // set volume to last used value 
    setVolume(intLastVolume); 

    // update scrubber and fill position/width 
    mcVideoControls.mcVolumeScrubber.x = (53 * intLastVolume) + 341; 
    mcVideoControls.mcVolumeFill.mcFillgreen.width = mcVideoControls.mcVolumeScrubber.x - 394 + 53; 
} 

function volumeScrubberClicked(e:MouseEvent):void { 
    // set volume scrub flag to true 
    bolVolumeScrub = true; 

    // start drag 
    mcVideoControls.mcVolumeScrubber.startDrag(false, new Rectangle(339.9, 14.1, 59.5, 0)); 
} 

function progressScrubberClicked(e:MouseEvent):void { 
    // set progress scrub flag to true 
    bolProgressScrub = true; 

    // start drag 
    mcVideoControls.mcProgressScrubber.startDrag (false, new Rectangle(55.8, 14.1, 176.9, 0)); 
} 

function mouseReleased(e:MouseEvent):void { 
    // set progress/volume scrub to false 
    bolVolumeScrub  = false; 
    bolProgressScrub = false; 

    // stop all dragging actions 
    mcVideoControls.mcProgressScrubber.stopDrag(); 
    mcVideoControls.mcVolumeScrubber.stopDrag(); 

    // update progress/volume fill 
    mcVideoControls.mcProgressFill.mcFillgreen.width = mcVideoControls.mcProgressScrubber.x + 5; 
    mcVideoControls.mcVolumeFill.mcFillgreen.width = mcVideoControls.mcVolumeScrubber.x - 394 + 53; 

    // save the volume if it's greater than zero 
    if((mcVideoControls.mcVolumeScrubber.x - 341)/53 > 0) 
     intLastVolume = (mcVideoControls.mcVolumeScrubber.x - 341)/53; 
} 

function updateDisplay(e:TimerEvent):void { 
    // checks, if user is scrubbing. if so, seek in the video 
    // if not, just update the position of the scrubber according 
    // to the current time 
    if(bolProgressScrub) 
     nsStream.seek(Math.round(mcVideoControls.mcProgressScrubber.x * objInfo.duration/176.9)) 
    else 
     mcVideoControls.mcProgressScrubber.x = nsStream.time * 176.9/objInfo.duration + 55.8; 

    // set time and duration label 
    mcVideoControls.lblTimeDuration.htmlText  = "<font color='#ffffff'>" + formatTime(nsStream.time) + "</font>/" + formatTime(objInfo.duration); 

    // update the width from the progress bar. the grey one displays 
    // the loading progress 
    mcVideoControls.mcProgressFill.mcFillgreen.width = mcVideoControls.mcProgressScrubber.x - 55.8; 
    mcVideoControls.mcProgressFill.mcFillGrey.width = nsStream.bytesLoaded * 176.9/nsStream.bytesTotal; 

    // update volume and the green fill width when user is scrubbing 
    if(bolVolumeScrub) { 
     setVolume((mcVideoControls.mcVolumeScrubber.x - 341)/53); 
     mcVideoControls.mcVolumeFill.mcFillgreen.width = mcVideoControls.mcVolumeScrubber.x - 394 + 53; 
    } 
} 

function onMetaData(info:Object):void { 
    // stores meta data in a object 
    objInfo = info; 

    // now we can start the timer because 
    // we have all the neccesary data 
    tmrDisplay.start(); 
} 

function netStatusHandler(event:NetStatusEvent):void { 
    // handles net status events 
    switch (event.info.code) { 
     // trace a messeage when the stream is not found 
     case "NetStream.Play.StreamNotFound": 
      trace("Stream not found: " + strSource); 
     break; 

     // when the video reaches its end, we stop the player 
     case "NetStream.Play.Stop": 
      stopVideoPlayer(); 
     break; 
    } 
} 

function stopVideoPlayer():void { 
    // pause netstream, set time position to zero 
    nsStream.pause(); 
    nsStream.seek(0); 

    // in order to clear the display, we need to 
    // set the visibility to false since the clear 
    // function has a bug 
    vidDisplay.visible     = false; 

    // switch play/pause button visibility 
    mcVideoControls.btnPause.visible = false; 
    mcVideoControls.btnPlay.visible  = true; 
} 

function setVolume(intVolume:Number = 0):void { 
    // create soundtransform object with the volume from 
    // the parameter 
    var sndTransform  = new SoundTransform(intVolume); 
    // assign object to netstream sound transform object 
    nsStream.soundTransform = sndTransform; 

    // hides/shows mute and unmute button according to the 
    // volume 
    if(intVolume > 0) { 
     mcVideoControls.btnMute.visible  = true; 
     mcVideoControls.btnUnmute.visible = false; 
    } else { 
     mcVideoControls.btnMute.visible  = false; 
     mcVideoControls.btnUnmute.visible = true; 
    } 
} 

function formatTime(t:int):String { 
    // returns the minutes and seconds with leading zeros 
    // for example: 70 returns 01:10 
    var s:int = Math.round(t); 
    var m:int = 0; 
    if (s > 0) { 
     while (s > 59) { 
      m++; 
      s -= 60; 
     } 
     return String((m < 10 ? "0" : "") + m + ":" + (s < 10 ? "0" : "") + s); 
    } else { 
     return "00:00"; 
    } 
} 

// ########################## 
// ############# INIT PLAYER 
// ########################## 
initVideoPlayer(); 

答えて

0

私はちょうどあなたのコードを理解しようと怠けている、あなたはそれについて移動する方法を理解するにはわかりません:)しかし、私はあなたと指摘しました私は個人的に避ける傾向があるstartDrag関数を使用してください。 lee brimelowは、OOPスクロールバーに関する非常に良いチュートリアルを持っています。これはビデオとはあまり関係がありませんが、MouseMoveイベントを登録する必要があるときはいつでもこの手法を使用しています。いずれにせよ、私は本当にあなたの 'ジャンプ'問題を解決すると思います。 基本的な考え方はマウスの位置をマウスに登録し、可能なオフセットを考慮して、マウスの移動イベントにリスナーを追加して、必要なスクラバー情報を更新することです...

希望!

チェックhttp://www.gotoandlearn.com/play?id=71

関連する問題