In an effort to learn and play with different aspects of XML driven Action-Scripting, I began dissecting various “slide show” tutorials on my spare time and trying to manipulating them. My goal: A ‘text-based’ slideshow that will tween an array of messages in 2 parts (1)on screen: from stage-right to stage-left (x axis) and (2)off screen: drop from stage-left to below the stage (y axis) and disappear as the next message in the array starts part 1. These messages should loop indefinitely following the same format. All of the messages are loaded from XML.
So far, I have had mild success, except for the final part. The slideshow works perfectly for the first play-through but not for the rest. After the first play-through, the slideshow starts all of the right to left tweens based on the ending y position of the previous, top to bottom tween, instead of its original loading position.
Example of what I mean:
for the first cycle, the right to left tween occurs at stage.y=5,
for the second cycle, the right to left tween occurs at stage.y=10
Tween 2 continues to work correctly.
Can anyone take a look at my as and tell me why this is happening? What am I missing? I am afraid I have completely exhausted all of my ideas. Thank you in advance, for anybody who takes the time to look it over.
XML:
<?xml version="1.0" encoding="utf-8"?>
<announcements speed="3">
<announcement message="blah,blah,blah,1" />
<announcement message="blah,blah,blah,2" />
<announcement message="blah,blah,blah,3" />
</announcements>
AS (3.0):
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
var mySpeed:Number;
var myTotal:Number;
var myAnnouncements:XMLList;
var myMessagesArray:Array=[];
var myPlaybackCounter:Number=0;
var mySlideshow:MovieClip = new MovieClip();
mySlideshow.x = 50
mySlideshow.y = 25
var myMessageSlides:MovieClip = new MovieClip();
var myTimer:Timer;
var myMessageExitTween:Tween;
var myMessageEnterTween:Tween;
var myXMLLoader:URLLoader = new URLLoader();
myXMLLoader.load(new URLRequest("announcements1.xml"));
myXMLLoader.addEventListener(Event.COMPLETE, processXML);
function processXML(e:Event):void {
var myXML:XML=new XML(e.target.data);
mySpeed=myXML.@speed;
myAnnouncements=myXML.announcement;
myTotal=myAnnouncements.length();
loadImages();
}
function loadImages():void {
for (var i:Number = 0; i < myTotal; i++) {
var myMessage:TextField = new TextField();
myMessage.text=myAnnouncements*.@message;
myMessage.autoSize=TextFieldAutoSize.LEFT;
myMessage.selectable = false
myMessagesArray.push(myMessage);
}
startShow();
}
function startShow():void {
addChild(mySlideshow);
mySlideshow.addChild(myMessageSlides);
nextImage();
myTimer=new Timer(mySpeed*1000);
myTimer.addEventListener(TimerEvent.TIMER, timerListener);
myTimer.start();
}
function nextImage():void {
var myMessage:TextField=TextField(myMessagesArray[myPlaybackCounter]);
myMessageSlides.addChild(myMessage);
myMessageEnterTween = new Tween(myMessage,"x",None.easeOut,701,1,1,true);
}
function timerListener(e:TimerEvent):void {
hidePrev();
myPlaybackCounter++;
if (myPlaybackCounter==myTotal) {
myPlaybackCounter =0;
nextImage()
}
else nextImage();
}
function hidePrev():void {
var myMessage:TextField=TextField(myMessageSlides.getChildAt(0));
myMessageExitTween = new Tween(myMessage,"y",None.easeOut,1,50,1,true);
myMessageExitTween.addEventListener(TweenEvent.MOTION_FINISH, onFadeOut)
}
function onFadeOut(e:TweenEvent):void {
myMessageSlides.removeChildAt(0)
}