title: Flash/Actionscript Tween not smooth
body: <p>I am using Flash - Actionscript 3.0 - to load image paths (and ultimately the images) from an XML file and then I am using the Tweener class to animate the tweens to scroll across the header.  </p>
  
  <p>The problem:  The scroll is not smooth, its quite choppy and I can't figure out why.</p>
  
  <p>I've read around the web that enabling bitmap smoothing helps but I don't know how to do that with images loaded from XML.</p>
  
  <p>If you need the code I can post it, but its rather long so I thought I wouldn't initially if anyone could think of some common reasons for this choppy tween. You can check out the scroll at one of our pages such as...</p>
  
  <p><a href="http://community.greencupboards.com/2011/07/15/lions-fighting-extinction/" rel="nofollow">http://community.greencupboards.com/2011/07/15/lions-fighting-extinction/</a> </p>
  
  <p>Thanks!</p>
  
  <p>EDIT: Code Requested</p>
  
  <pre><code>import fl.transitions.Tween;
  import fl.transitions.easing.*;
  import fl.transitions.TweenEvent;
  import caurina.transitions.*
  
  var imageLoader:Loader;
  var currentLoader:Loader;
  var xml:XML;
  var xmlList:XMLList;
  var xmlLoader:URLLoader = new URLLoader();
  var xmlLoader2:URLLoader = new URLLoader();
  var k:int;
  var iterator:int = 0;
  var imageCount:int;
  
  //********** Begin editable region *************///
  //---------------------------------------------
  //dont change startX unless you are sure -&gt; 
  //start coordinates are affected by more than this variable
  var startX:Number = 690;
  //change endX to extend the scroll length
  var endX:Number = 20;
  //change scrollSpeed to change speed of images
  var scrollSpeed:Number = 32;
  //---------------------------------------------
  //********** End editable region **************///
  
  var ratio:Number = scrollSpeed/(startX-endX);
  var rate:Number = (startX-endX)/scrollSpeed;
  
  //align tabs under heading
  setChildIndex(headertab,1);
  
  // ----- Program Main ----- //
  initializeMouseEvents();
  Main_Begin();
  
  //@ initializes mouse events for url navigation
  function initializeMouseEvents():void
  {
  Mouse.cursor = flash.ui.MouseCursor.BUTTON
  headertab.addEventListener(MouseEvent.ROLL_OVER, expandTab);
  headertab.addEventListener(MouseEvent.ROLL_OUT, shrinkTab);
  function expandTab(e:MouseEvent):void
  {
      Tweener.addTween(headertab, {y:5, time:.1, delay:0, transition:"linear"});
  }
  function shrinkTab(e:MouseEvent):void
  {
      Tweener.addTween(headertab, {y:0, time:.1, delay:0, transition:"linear"});
  }
  stage.addEventListener(MouseEvent.CLICK, onClick);
  function onClick(e:MouseEvent):void
  {
      navigateToURL(new URLRequest("http://www.greencupboards.com"), "_blank");
  }
  }
  
  function Main_Begin():void
  {
  xmlLoader.load(new URLRequest("http://www.greencupboards.com/media/community/scroll/images.xml"));
  xmlLoader.addEventListener(Event.COMPLETE, loadInitialXml);
  
  function loadInitialXml(event:Event):void
  {
      xml = XML(event.target.data);
      xmlList = xml.children();
      imageCount = xmlList.length();
      for(var j:int = 1; j &lt; 10; j++)
      {
          k = imageCount - j;
          imageLoader = new Loader();
          imageLoader.name = "loader"+j;
          imageLoader.load(new URLRequest(xmlList[k].source));
          imageLoader.x = endX + 60*(j+1) + 10;
          imageLoader.y = 37;
          //imageLoader.addEventListener(MouseEvent.ROLL_OVER, pauseAll);
          //imageLoader.addEventListener(MouseEvent.ROLL_OUT, resumeAll);
          addChild(imageLoader);
          setChildIndex(imageLoader,1);
          //Tweener.addTween(imageLoader, {alpha:1, time:1.4, delay:0, transition:"linear"});
          Tweener.addTween(imageLoader, {x:endX, time:rate*(j+1)/7.2, delay:0, transition:"linear"});
          Tweener.addTween(imageLoader, {alpha:0, time:2, delay:(rate*(j+1)/7.5)-4, transition:"linear"});
          imageLoader.unload();
      }
  
      //first scrolling images to fade in
      loadXML();
      //loop of scrolling images infinetely
      function loop():void 
      {
          loadXML();
      }
      setInterval(loop,(  ((imageCount*60))/rate)*1000   );
  
  //imageLoader.name = xmlList[i].attribute("source");
  }
  }
  
  function loadXML()
  {
  xmlLoader2.load(new URLRequest("http://www.greencupboards.com/media/community/scroll/images.xml"));
  xmlLoader2.addEventListener(Event.COMPLETE, xmlLoaded);
  
  function xmlLoaded(event:Event):void
  {
      xml = XML(event.target.data);
      xmlList = xml.children();
      imageCount = xmlList.length();
      for(var i:int = 0; i &lt; xmlList.length(); i++)
      {
          imageLoader = new Loader();
          imageLoader.name = "loader"+i;
          imageLoader.load(new URLRequest(xmlList[i].source));
          imageLoader.x = startX + 60*i;
          imageLoader.y = 37;
          imageLoader.alpha = -1;
          //imageLoader.addEventListener(MouseEvent.ROLL_OVER, pauseAll);
          //imageLoader.addEventListener(MouseEvent.ROLL_OUT, resumeAll);
          addChild(imageLoader);
          setChildIndex(imageLoader,1);
          makeTween(imageLoader);
          iterator++;
      }
  iterator = 0;
  //imageLoader.name = xmlList[i].attribute("source");
  }
  }
  
  function resumeAll(event:Event):void
  {
      Tweener.resumeAllTweens();
  }
  
  function pauseAll(event:Event):void
  {
      Tweener.pauseAllTweens();
  }
  
  function makeTween(obj:Loader):void
  {
  Tweener.addTween(obj, {alpha:1, time:2, delay:60*ratio*iterator+3.3, transition:"linear"});
  Tweener.addTween(obj, {x:endX, time:(scrollSpeed + 60*ratio*iterator), delay:0, transition:"linear", onComplete:unloadObject(obj)});
  }
  
  function unloadObject(obj:Object):void
  {
  //iterator - 2 simply creates a big enough delay.  I think the scroll gets ahead of fadeout so it needs this buffer to run many times
  Tweener.addTween(obj, {alpha:0, time:2, delay:(scrollSpeed + 60*ratio*(iterator-2)), transition:"linear"});
  obj.unload();
  }
  </code></pre>