Flash/Actionscript Tween not smooth -


i using flash - actionscript 3.0 - load image paths (and images) xml file , using tweener class animate tweens scroll across header.

the problem: scroll not smooth, quite choppy , can't figure out why.

i've read around web enabling bitmap smoothing helps don't know how images loaded xml.

if need code can post it, rather long thought wouldn't if think of common reasons choppy tween. can check out scroll @ 1 of our pages such as...

http://community.greencupboards.com/2011/07/15/lions-fighting-extinction/

thanks!

edit: code requested

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 sure ->  //start coordinates affected more variable var startx:number = 690; //change endx extend scroll length var endx:number = 20; //change scrollspeed 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 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 < 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 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; < 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 creates big enough delay.  think scroll gets ahead of fadeout needs buffer run many times tweener.addtween(obj, {alpha:0, time:2, delay:(scrollspeed + 60*ratio*(iterator-2)), transition:"linear"}); obj.unload(); } 

sometimes better way animations animating hand using enter_frame event.

my advice: rid of tweener , write own animation-loop.

package  {   import flash.display.sprite;   import flash.events.event;    [swf(width="400", height="100", framerate="30", backgroundcolor="#ffffff")]   public class main extends sprite   {     private var items : array;     public function main()     {         items = [];         var curx:int = 0;         // create items         (var i:int=0;i<10;i++)         {             var s:sprite = new sprite();             s.x = curx;             s.graphics.beginfill(0xff0000*i/10, 1);             s.graphics.drawrect(0, 0, 20, 40);             items.push(s);              addchild(s);             curx += s.width + 6;         }         addeventlistener(event.enter_frame, onenterframe);     }      private function onenterframe(event : event) : void      {         var i:int = items.length-1;         var s:sprite;         while (i >= 0)         {             s = items[i] sprite;             if (s.x <= -20) {                 s.x = stage.stagewidth;             }             s.x -= 2;             --i;                         }     }   } } 

and running example: http://wonderfl.net/c/nhhm

cheers


Comments

Popular posts from this blog

c# - How to set Z index when using WPF DrawingContext? -

razor - Is this a bug in WebMatrix PageData? -

visual c++ - Using relative values in array sorting ( asm ) -