| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Sep 2010
Beiträge: 3
| 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: Code: var slideshow:Slideshow = new Slideshow("list.xml");
addChild(slideshow); in der as datei steht folgendes: Code: 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: 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> |
| | |
| | #2 (permalink) |
| in the boondocks Registriert seit: Feb 2006 Ort: Augsburg
Beiträge: 3.238
|
hi und willkommen im forum! wenn ich das beim überfliegen richtig gesehen habe befinden sich alle daten in einem array namens queue und werden dort rausgenommen, aber nicht wieder ans ende angefügt. such mal diese zeile PHP-Code: PHP-Code: mfg sx |
| | |
| | #4 (permalink) |
| Neuer User Registriert seit: Sep 2010
Beiträge: 3
|
jetzt ist nur das problem, bei weit über 200 dateien bleibt das flash irgendwann (nach ca. 5minuten) stehen. ich habe die bilder schon so doll runtergerechnet, das keines mehr über 10mb hat. ich vermute mal das der virtuelle speicher voll ist. gibt es irgendwo die möglichkeit, im flash einen cache entleeren zu programmieren? oder hat jemand schon einmal so ein problem gehabt und weiß die lösung dafür?
|
| | |
| | #5 (permalink) |
| in the boondocks Registriert seit: Feb 2006 Ort: Augsburg
Beiträge: 3.238
|
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: Geändert von shin10 (03-09-2010 um 21:41 Uhr) |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Flash CS3] Problem XML Slideshow | abraxas323 | Flash Einsteiger | 5 | 21-04-2009 08:25 |
| Slideshow Problem! | dj_mk | Flash MX 2004 | 3 | 05-11-2005 18:42 |
| Problem mit Endlosschleife | Citta_Rafa | Flash MX 2004 | 1 | 04-10-2005 11:29 |
| problem mit endlosschleife | -=[Mad]=- | ActionScript 1 | 1 | 24-01-2005 13:31 |
| geturl problem... öffnen der seite hört nicht mehr auf.. endlosschleife | Chris G. | Flash 4 und Flash 5 | 2 | 07-11-2001 18:10 |