Einzelnen Beitrag anzeigen
Alt 03-09-2010, 20:38   #5 (permalink)
shin10
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.495
hi,

erstmal mein fehler. hab ja nur kurz drübergeblinzelt und durch die änderung eine endlosschleife gemacht. leider beim laden.

ich weiß nicht was du dir da zusammenkopiert hast, aber zum durchschleifen der animation hab ich doch ein paar änderungen vornehmen müssen. ich hab soweit nur alles auskommentiert was störend war.

die schleife funktioniert, aber da ich es minimalistisch halten wollte, was die änderungen betrifft ist es für über 100 bilder wohl ziemlich ungeeignet. um es performanter zu machen müsste ich ein gutes stück tiefer eingreifen.

PHP-Code:
package
{
   
import flash.display.*;
   
import flash.events.*;
   
import flash.net.*;
   
import flash.text.*;
   
import flash.utils.*;



   public class 
Slideshow extends Sprite
   
{

      private const 
PIC_SPACING:int 30;
      private const 
ANIMATION_STILL_TIME:int =  0;
      private const 
ANIMATION_SPEED_FACTOR:int 1;
      private const 
ANIMATION_INTERVAL:int 50;
      private const 
RANDOMIZE_IMAGES:Boolean true;
      
      private var 
queue:Array  = [];
      private var 
titles:Array = [];
      
      private var 
loader:Loader;
      private var 
xmlLoader:URLLoader;
      private var 
datasource:String;
      private var 
animator:Timer;
      
      private var 
xPos:int;
      private var 
yPos:int;
      private var 
lastTime:int;
      private var 
loadedItems:int;
      private var 
displayedItems:int;
      private var 
crtTitle:String;
      
      private var 
container:Sprite;
      private var 
titleField:TextField;
      

      public function 
Slideshow(datasource:String)
      {
         
container = new Sprite();
         
addChild(container);
         
         
this.datasource datasource;
         
         
xmlLoader = new URLLoader(new URLRequest(datasource));
         
xmlLoader.addEventListener(Event.COMPLETEonDataLoaded);
         
addEventListener(Event.ADDED_TO_STAGEonAddedToStage);
      }
      

      private function 
onAddedToStage(e:Event):void
      
{
         
stage.scaleMode StageScaleMode.EXACT_FIT;      
         
//container.x = stage.stageWidth;
         
container.stage.stageHeight/2.2;
         
         
titleField = new TextField();
         
titleField.0;
         
titleField.width stage.stageWidth;
         
titleField.stage.stageHeight 30;
         
titleField.height 30;
         
titleField.selectable false;
         
titleField.embedFonts true;
         
titleField.antiAliasType flash.text.AntiAliasType.ADVANCED;

         var 
format:TextFormat = new TextFormat();
            
format.font = new TitleFont().fontName;
            
format.align TextFormatAlign.CENTER;
            
format.size 20;
            
titleField.defaultTextFormat format;
         
titleField.text "";

         
addChild(titleField);
         
         
animator = new Timer(ANIMATION_INTERVAL);
         
animator.addEventListener(TimerEvent.TIMERanimate);
         
animator.start();

      }

      private function 
onDataLoaded(e:Event):void
      
{
         if (!
xmlLoader.data)
         {
            
trace("XML Load failed");
            return;
         }
         
            var 
dataXml:XML XML(xmlLoader.data);
            for 
each (var item:XML in dataXml.item)
            {
               
queue.push({url:item.@srctitle:item.@title});
            }
            if (
RANDOMIZE_IMAGES)
               
queue shuffle(queue);
      
            
loadNextItem();
            }
      private function 
loadNextItem():void
      
{
         var 
item:Object queue.shift();
         
         if (
item==null)
            return;
         
crtTitle item.title;
         
         
loader = new Loader();
         
loader.contentLoaderInfo.addEventListener(Event.INITonItemLoaded);
         
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERRORonItemError);
         
loader.load(new URLRequest(item.url));
      }


      private function 
onItemLoaded(e:Event):void
      
{
         
trace("loaded "+crtTitle);
         
         
loadedItems++;
         
         var 
content:Bitmap Bitmap(loader.content);
         
content.xPos;
         
xPos += content.width PIC_SPACING;
         
yPos 500;
         
container.addChild(content);
         
titles.push(crtTitle);
         
         if (
queue.length>0)
            
loadNextItem();
         else
         {
            
/*var refFirst:Bitmap = Bitmap(container.getChildAt(0));
            var refLast :Bitmap = Bitmap(container.getChildAt(container.numChildren-1));
            
            var copyFirst:Bitmap = new Bitmap(refFirst.bitmapData);
            var copyLast:Bitmap  = new Bitmap(refLast.bitmapData);
            
            copyLast.x = -copyLast.width - PIC_SPACING;
            copyFirst.x = xPos;
            copyLast.alpha = .5;
            copyFirst.alpha = .5;
            
            
            container.addChild(copyFirst);
            container.addChild(copyLast);*/
            
gesamtBreite container.width PIC_SPACING;
         }
      }
      private var 
gesamtBreite:Number 0;
      private function 
onItemError(e:Event):void
      
{
         
trace("load error");
         
loadNextItem();
      }
      

      private function 
animate(e:TimerEvent):void
      
{            
         if (
loadedItems<1)
            return;
         
         if (
container.numChildren displayedItems)
         {
            var 
picToShow:Bitmap Bitmap(container.getChildAt(displayedItems));
            var 
targetX:int stage.stageWidth/2;
            var 
itemX:int picToShow.picToShow.width/container.x;
            
            var 
delta:int 5;//(itemX-targetX) / ANIMATION_SPEED_FACTOR;
         
}
         else
         {
            var 
picToShow:Bitmap Bitmap(container.getChildAt(displayedItems-1));
            var 
delta:int 0;
         }

         if (
delta<=0)
         {

            if (((
getTimer()-lastTime) >= ANIMATION_STILL_TIME 1000) && (container.numChildren displayedItems))
            {
               
lastTime getTimer();
               
displayedItems++;
               
titleField.text "";
            }
            else
            {

               if (
titleField.text == "" && titles[container.getChildIndex(picToShow)] != null)
                  
titleField.text titles[container.getChildIndex(picToShow)];
            }
         }

         else
         {
           
/* if ((displayedItems==loadedItems) && ((container.x + container.getChildAt(displayedItems-1).x) <=0))
            {
               var diff:int = 0 - (container.x + container.getChildAt(displayedItems-1).x);
               
               container.x = container.getChildAt(container.numChildren-1).width - diff;
               displayedItems = 0;
            }
               */
            //container.x -= delta; 
            
for(var i:int 0container.numChildreni++){
                var 
mc container.getChildAt(i);
                
mc.-= delta;
                if(
mc.< -mc.widthmc.+= gesamtBreite;
            }
         }
      }
      

      private function 
shuffle(arr:Array):Array
      {
         var 
shuffled:Array = arr.slice();
         for (var 
i:int=0i<arr.lengthi++)
         {
            var 
element:Object shuffled[i];
            var 
rnd:int Math.floor(arr.length Math.random());
            
shuffled[i] = shuffled[rnd];
            
shuffled[rnd] = element;
         }
         return 
shuffled;
      }
   }

__________________

flintfabrik.de

Geändert von shin10 (03-09-2010 um 20:41 Uhr)
shin10 ist offline   Mit Zitat antworten