2009-09-01 7 views
0

Cela fait longtemps que je n'ai pas utilisé Flash, alors je pense qu'il est préférable d'apprendre ActionScript 3. Cependant, j'ai travaillé sur un [tutoriel vidéo Flash] [1] et j'ai vraiment du mal à cusomise la mise en page pour mes propres besoins. J'ai déplacé la barre de progression de 13,9px vers la droite et de 55,8px vers la droite. J'ai également réduit la barre de progression à 176.9px. Le problème est quand je clique sur le scrubber il saute vers la droite par le 55.8px. Je sais que je dois écrire quelque part que l'épurateur devrait commencer à 55.8px mais chaque fois que j'essaye je finis par causer d'autres issues. Est-ce que quelqu'un pourrait jeter un coup d'oeil à mon code et suggérer ce que je dois changer.Flash Actionscript 3.0 Aide sur le lecteur vidéo

Cordialement,

Matt

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

Répondre

0

Je ne suis pas sûr de comprendre comment vous allez, juste être paresseux à essayer de comprendre votre code :) mais je l'ai noté que vous utilisez la fonction startDrag, que j'ai personnellement tendance à éviter. Lee Brimelow a un très bon tutoriel sur une barre de défilement OOP où il explique un moyen de contourner cela. Certes, cela n'a pas grand chose à voir avec la vidéo, mais j'ai maintenant utilisé cette technique chaque fois que j'ai besoin d'enregistrer des événements MouseMove. en tout cas, je pense vraiment que cela résoudrait votre problème de "saut". l'idée de base est d'enregistrer votre position de la souris en tenant compte des éventuels décalages, puis ajouter un écouteur aux événements de déplacement de la souris qui mettra à jour les informations de nettoyage nécessaires ...

espérons que cela aide!

contrôle http://www.gotoandlearn.com/play?id=71

Questions connexes