Hi, I m trying to make a content player that plays externally loaded swfs. I haven’t found anything on the net that pleases me so decided to built one.
But I have a problem with the scrub bar. When I try to drag it it jumps back. The same code I am about to post works fine when the content is a [COLOR="#B22222"]MovieClip[/COLOR] and NOT an [COLOR="#B22222"]externally loaded swf[/COLOR].
What am I missing?
var loader:Loader = new Loader();
addChild(loader);
var animLength: int;
loader.mask = mask_mc;
loader.load(new URLRequest("L1P1.swf"));
var currentMovie:MovieClip = new MovieClip();
play_mc.buttonMode = true;
stop_mc.buttonMode = true;
stop_mc.addEventListener(MouseEvent.CLICK, button_pause);
play_mc.addEventListener(MouseEvent.CLICK, playClicked);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, trackLoad);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, swfLoaded);
function playClicked(event:Event):void
{
currentMovie.play();
}
function button_pause(e:Event):void{
currentMovie.stop();
}
function trackLoad(event:ProgressEvent):void
{
var perLoaded:Number = event.bytesLoaded / event.bytesTotal;
prog_mc.preload.scaleX = perLoaded;
}
function swfLoaded(event:Event):void
{
addEventListener(Event.ENTER_FRAME, trackPlayback);
var scale:Number = Math.min( mask_mc.width / MovieClip(loader.content).width,
mask_mc.height / MovieClip(loader.content).height );
MovieClip(loader.content).scaleX = MovieClip(loader.content).scaleY = scale;
//currentMovie.stop();
currentMovie = MovieClip(loader.content);
trace(currentMovie.totalFrames);
animLength = currentMovie.totalFrames;
}
function trackPlayback(event:Event):void
{
var perPlayed:Number = MovieClip(loader.content).currentFrame / MovieClip(loader.content).totalFrames;
prog_mc.drag.x = (prog_mc.width - prog_mc.drag.width) * perPlayed;
}
var leftBound : Number = prog_mc.drag.x;
var rightBound : Number = prog_mc.drag.x + prog_mc.drag.width;
var dragBound : Rectangle = new Rectangle(leftBound, prog_mc.drag.y, prog_mc.drag.width-10, 0);
var calcWidth : Number = prog_mc.drag.width / animLength;
var animPlaying : Boolean = false;
prog_mc.drag.x = leftBound;
prog_mc.drag.buttonMode = true;
prog_mc.drag.addEventListener(MouseEvent.MOUSE_DOWN, handleMouseEvents);
function handleMouseEvents(evt:MouseEvent):void
{
switch(String(evt.type)) {
case MouseEvent.MOUSE_DOWN:
prog_mc.drag.startDrag(true, dragBound);
stage.addEventListener(MouseEvent.MOUSE_UP, handleMouseEvents);
currentMovie.addEventListener(Event.ENTER_FRAME, scrubMovie);
trace(animLength);
if (animPlaying) stopAnimation();
break;
case MouseEvent.MOUSE_UP:
prog_mc.drag.stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_UP, handleMouseEvents);
currentMovie.removeEventListener(Event.ENTER_FRAME, scrubMovie);
if (animPlaying) playAnimation();
break;
}
}
////HERE IS THE SCRUB BAR UPDATE////////////////////////////////////////////////////////
function scrubMovie(evt:Event):void
{
var scrubPos : int = prog_mc.drag.x;
var gotoFrame : int = Math.ceil(scrubPos / calcWidth);
currentMovie.stop();
currentMovie.gotoAndPlay(gotoFrame);
}
function togglePlay(evt:MouseEvent):void
{
if (!animPlaying) {
playAnimation();
animPlaying = true;
prog_mc.drag.addEventListener(Event.ENTER_FRAME, updateScrubber);
} else {
stopAnimation();
animPlaying = false;
prog_mc.drag.removeEventListener(Event.ENTER_FRAME, updateScrubber);
}
}
function updateScrubber(evt:Event):void
{
var percent : Number = currentMovie.currentFrame / animLength;
prog_mc.drag.x = percent * prog_mc.drag.width-10;
}
function playAnimation():void
{
currentMovie.play();
prog_mc.addEventListener(Event.ENTER_FRAME, updateScrubber);
}
function stopAnimation():void
{
currentMovie.stop();
prog_mc.removeEventListener(Event.ENTER_FRAME, updateScrubber);
}