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.COMPLETE, onDataLoaded);
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function onAddedToStage(e:Event):void
{
stage.scaleMode = StageScaleMode.EXACT_FIT;
//container.x = stage.stageWidth;
container.y = stage.stageHeight/2.2;
titleField = new TextField();
titleField.x = 0;
titleField.width = stage.stageWidth;
titleField.y = 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.TIMER, animate);
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.@src, title: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.INIT, onItemLoaded);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onItemError);
loader.load(new URLRequest(item.url));
}
private function onItemLoaded(e:Event):void
{
trace("loaded "+crtTitle);
loadedItems++;
var content:Bitmap = Bitmap(loader.content);
content.x = 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.x + picToShow.width/2 + 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 = 0; i < container.numChildren; i++){
var mc = container.getChildAt(i);
mc.x -= delta;
if(mc.x < -mc.width) mc.x += gesamtBreite;
}
}
}
private function shuffle(arr:Array):Array
{
var shuffled:Array = arr.slice();
for (var i:int=0; i<arr.length; i++)
{
var element:Object = shuffled[i];
var rnd:int = Math.floor(arr.length * Math.random());
shuffled[i] = shuffled[rnd];
shuffled[rnd] = element;
}
return shuffled;
}
}
}