Jump to content
Search Community

mrittman

Members
  • Posts

    1
  • Joined

  • Last visited

Posts posted by mrittman

  1. I'm working on a horizontal scrolling news ticker and was wondering if someone could go over my code and help clean it up a bit. I'm fairly new to Actionscript 3 so I'm sure there are a lot of redundant areas in the code that could be optimized.

     

    Here is a working demo of what I have: http://www.info2gousa.com/news/News2.swf

     

    Here's my code and I have attached the source files:

     

    import com.greensock.*;
    import com.greensock.easing.*;
    
    //hides the image until it is loaded
    theImage.alpha=0;
    loadingBar.visible = false;
    
    //variables to hold the final coordinates of the image tween
    var finalX:Number;
    var finalY:Number;
    var endX:Number;
    var endY:Number;
    var pausedX:Number;
    var pausedY:Number;
    var beginX:Number;
    var beginY:Number;
    
    //variable to hold the number of images in the XML
    var listLength:Number;
    
    //keeps track of what image should be displayed
    var currPhoto:Number=0;
    
    //arrays to hold the contents of the XML, using this to allow
    //for the random order of the images
    var photoArray:Array = new Array();
    var descriptionArray:Array = new Array();
    var titleArray:Array = new Array();
    
    //Loader event for the XML
    var loader:URLLoader = new URLLoader();
    loader.addEventListener(Event.COMPLETE, onLoaded);
    
    var xml:XML;
    
    loader.load(new URLRequest("news.xml"));
    
    function onLoaded(e:Event):void {
    //load XML
    xml=new XML(e.target.data);
    var il:XMLList=xml.article;
    listLength=il.length();
    
    populateArray();
    }
    
    function populateArray():void {
    //takes the properties defined in the XML and stores them 
    //into arrays
    var i:Number;
    for (i = 0; i < listLength; i++) {
    	photoArray[i]=xml.article[i].photo;
    	titleArray[i]=xml.article[i].title;
    	descriptionArray[i]=xml.article[i].description;
    }
    beginImage();
    }
    
    function beginImage():void {
    //grabs a random number between 0 and the number
    //of images in the array
    currPhoto=Math.floor(Math.random()*photoArray.length);
    
    //load title and description
    theTitle.text=titleArray[currPhoto];
    theDescription.text=descriptionArray[currPhoto];
    
    theImage.scaleX=1;
    theImage.scaleY=1;
    
    var imageLoader = new Loader();
    
    //catches errors if the loader cannot find the URL path
    imageLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, catchFunction);
    //actually loads the URL defined in the image array
    imageLoader.load(new URLRequest(photoArray[currPhoto]));
    //adds a listener for while the image is loading
    imageLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, imgLoading);
    //adds a listener for what to do when the image is done loading
    imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);
    
    
    function catchFunction(e:IOErrorEvent) {
    	trace("Bad URL: " + photoArray[currPhoto] + " does not exist");
    	//take out the bad URL from the array
    	photoArray.splice(currPhoto,1);
    	titleArray.splice(currPhoto,1);
    	descriptionArray.splice(currPhoto,1);
    
    	//check to see if there are images left,
    	//else restart the news ticker
    	if (photoArray.length==0) {
    		populateArray();
    	} else {
    		beginImage();
    	}
    }
    
    function imgLoading(event:ProgressEvent):void{
    	//show the loading bar, and update the width
    	//based on how much is loaded
    	loadingBar.visible = true;
    	loadingBar.bar.width = (event.bytesLoaded/event.bytesTotal)*100;
    }
    
    function imgLoaded(event:Event):void {
    	loadingBar.visible = false;
    
    	//add the image and get the dimensions to center the image
    	theImage.addChild(imageLoader);
    	//take the contents of the loaded image and cast it as bitmap data
    	//to allow for bitmap smoothing
    	var image:Bitmap = imageLoader.content as Bitmap;
    	image.smoothing=true;
    	//starting position of image
    	theImage.x = (stage.stageWidth+10);
    	theImage.y = (stage.stageHeight-71) - (imageLoader.content.height / 2);
    	//paused position of image
    	finalX = (142-imageLoader.content.height)/2;
    	finalY = (stage.stageHeight-71) - (imageLoader.content.height / 2);
    	//Ending position of image
    	endX = ((0-stage.stageWidth)+10) - (imageLoader.content.width * .8 / 2);
    	endY = (stage.stageHeight-71) - (imageLoader.content.height / 2);
    
    	theDescription.x = (finalX*2)+imageLoader.content.width;
    	theDescription.width = (stage.stageWidth - imageLoader.content.width) - (finalX*3);
    	pausedX = theDescription.x;
    	beginX = pausedX + 520;
    
    	//start tween function
    	easeIn();
    }
    }
    
    function easeIn():void {
    TweenLite.to(theImage, 1.5, {x:finalX, y:finalY, onComplete:pauseCurrent});
    TweenLite.to(theImage, 1, {alpha:1, overwrite:0});
    
    TweenLite.from(theTitle, 1.5, {x:528, y:5});
    TweenLite.to(theTitle, 1.5, {x:8, y:5, onComplete:pauseCurrent});
    TweenLite.to(theTitle, 1, {alpha:1, overwrite:0});
    
    TweenLite.from(theDescription, 1.5, {x:520+pausedX, y:44});
    TweenLite.to(theDescription, 1.5, {x:pausedX, y:44, onComplete:pauseCurrent});
    TweenLite.to(theDescription, 1, {alpha:1, overwrite:0});
    }
    
    function pauseCurrent():void {
    TweenLite.to(theImage, 20, {onComplete:easeOut});
    TweenLite.to(theTitle, 20, {onComplete:easeOut});
    TweenLite.to(theDescription, 20, {onComplete:easeOut});
    }
    
    function easeOut():void {
    TweenLite.to(theImage, 1.5, {x:endX, y:endY, alpha:0, onComplete:nextImage});
    TweenLite.to(theTitle, 1.5, {x:-512, y:5, alpha:0});
    TweenLite.to(theDescription, 1.5, {x:pausedX-520, y:44, alpha:0});
    }
    
    function nextImage():void {
    //take out the image that was just displayed
    photoArray.splice(currPhoto,1);
    titleArray.splice(currPhoto,1);
    descriptionArray.splice(currPhoto,1);
    
    //remove the image
    theImage.removeChildAt(0);
    
    //start over
    if (photoArray.length==0) {
    	populateArray();
    } else {
    	beginImage();
    }
    }

     

    Thank you!

×
×
  • Create New...