A Flash Developer Resource Site

Results 1 to 7 of 7

Thread: [F8] MovieClipLoader assistance

Threaded View

  1. #6
    Bearded (M|G)od MyFriendIsATaco's Avatar
    Join Date
    Dec 2002
    Location
    Awesomeville.
    Posts
    3,045
    here we go:
    Code:
    //myMovieClipLoader class written by Matthew Robenolt
    //(c)2006 YDEK Productions
    //http://www.youdontevenknow.us
    
    class us.youdontevenknow.myMovieClipLoader
    {
    	private static var _queue:Array;
    	private static var mc_progresses:Array;
    	private static var mcLoader:MovieClipLoader;
    	private static var mcLoaderListener:Object;
    	private static var howManyLoaded:Number  = 0;
    	private static var howManyStarted:Number = 0;
    	private static var ids:Array;
    	private static var currentLoadedBytes:Number = 0;
    	private static var currentTotalBytes:Number  = 0;
    	
    	private static var startLoadTime:Number;
    	private static var loadDuration:Number;
    	
    	private static var _onAllLoadComplete:Function;
    	private static var _onAllLoadProgress:Function;
    	
    	public function myMovieClipLoader()
    	{
    		_queue           = new Array();
    		mc_progresses    = new Array();
    		ids              = new Array();
    		mcLoader         = new MovieClipLoader();
    		mcLoaderListener = new Object();
    		mcLoader.addListener(mcLoaderListener);
    		mcLoaderListener.onLoadComplete = oneLoaded;
    		mcLoaderListener.onLoadProgress = updateProgress;
    		mcLoaderListener.onLoadStart    = downloadStarted;
    	}
    	
    	private function downloadStarted(target_mc:MovieClip):Void
    	{
    		ids.push(String(target_mc));
    		mc_progresses[ids.length-1] = {downloaded:0, total:0};
    
    		howManyStarted++;
    	}
    	
    	private function oneLoaded():Void
    	{
    		howManyLoaded++;
    		
    		//trace("loaded so far: "+howManyLoaded +"/"+_queue.length);
    		
    		if (howManyLoaded == _queue.length)
    		{
    			loadDuration = getTimer() - startLoadTime;
    			
    			_onAllLoadComplete(loadDuration);
    		}
    	}
    	
    	private function updateProgress(target_mc:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void
    	{
    		var currentid:Number = 0;
    		for (var i:Number = 0; i < ids.length; i++)
    		{
    			if (ids[i] == String(target_mc)) 
    			{
    				currentid = i;
    				break;
    			}
    		}
    		mc_progresses[currentid].downloaded = bytesLoaded;
    		mc_progresses[currentid].total = bytesTotal;
    		
    		currentLoadedBytes = 0;
    		currentTotalBytes = 0;
    		
    		for (var i:Number = 0; i < ids.length; i++)
    		{
    			currentLoadedBytes += mc_progresses[i].downloaded;
    			currentTotalBytes  += mc_progresses[i].total;
    		}
    		
    		
    		_onAllLoadProgress(currentLoadedBytes, currentTotalBytes);
    	}
    	
    	public function addToQueue(_filename:String, _target_mc:MovieClip):Void
    	{
    		//trace(_filename+" added to queue");
    		_queue.push({filename:_filename, target_mc:_target_mc});
    	}
    	
    	public function loadAll():Void
    	{
    		if (_queue.length > 0)
    		{
    			howManyLoaded = 0;
    			startLoadTime = getTimer();
    			for (var i:Number = 0; i < _queue.length; i++)
    			{
    				mcLoader.loadClip(_queue[i].filename, _queue[i].target_mc);
    			}
    		}
    		else
    		{
    			trace("no items in queue!");
    		}
    	}
    	
    	public function set onAllLoadComplete(func:Function):Void
    	{
    		_onAllLoadComplete = func;
    	}
    	
    	public function set onAllLoadProgress(func:Function):Void
    	{
    		_onAllLoadProgress = func;
    	}
    }
    here is how its used:
    Code:
    import us.youdontevenknow.myMovieClipLoader;
    
    var loader:myMovieClipLoader = new myMovieClipLoader();
    loader.addToQueue("image1.png", target1_mc);
    loader.addToQueue("image2.png", target2_mc);
    loader.addToQueue("image3.png", target3_mc);
    loader.loadAll();
    
    loader.onAllLoadComplete = function(loadDuration:Number):Void
    {
    	trace("all loaded in "+loadDuration+"ms");
    };
    loader.onAllLoadProgress = function(bytesLoaded:Number, bytesTotal:Number):Void
    {
    	trace("loading..."+Math.round((bytesLoaded/bytesTotal)*100)+"%");
    };
    if anyone has any suggestions for a feature or improvement, lemme know and ill add it

    ps] sorry if the code is a bit sloppy. i havent completely cleaned it up yet or optimized it. i just got it to work! feel free to use it!
    Last edited by MyFriendIsATaco; 10-31-2006 at 02:48 AM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  




Click Here to Expand Forum to Full Width

HTML5 Development Center