icke3
Threadersteller
Dabei seit: 02.09.2010
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Do 02.09.2010 14:36
Titel Endlosschleife in Slideshow - Problem! |
|
|
hallo,
ich soll für meine ausbildung eine scrollende slideshow erstellen. ich habe das so weit auch hinbekommen. aber nun soll das ganze endlos laufen. wie mache ich einen loop bei einer xml datei? die daten der xml liste werden in ein arry gespeichert und dann durchgearbeitet. wenn vorbei dann vorbei.
nun stehe ich unter zeitdruck. habe schon den ganzen tag probiert und stehe völlig auf dem schlauch. ihr seid meine letzt rettung!!!!
in bild 1 ist folgender code: Code: | var slideshow:Slideshow = new Slideshow("list.xml");
addChild(slideshow); |
in der as datei steht folgendes: 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;
container.addChild(copyFirst);
container.addChild(copyLast);
}
}
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;
}
}
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;
}
}
}
|
die xml datei liegt im selben ordner und hat folgende struktur: Code: | <slideshow>
<item src="slides/1.jpg" title=""/>
<item src="slides/2.jpg" title=""/>
<item src="slides/3.jpg" title=""/>
<item src="slides/4.jpg" title=""/>
</slideshow> |
|
|