Cercherò di spiegare il più chiaramente possibile (spero
):
Premetto che AS3 l'ho imparato da autodidatta semplicemente guardando un pò di pagine di codice e cercando di capirci qualcosa (senza leggere guide ne altro).
Mi son messo quindi a fare questo slideshow... e miracolosamente son riuscito a farlo funzionare!
Ora arriva il problema:
visto che devo necessariamente caricare delle immagini png trasparenti ho cercato di dire a sto benedetto coso di svuotare il container corrente, prima di caricare il successivo.
Il fatto è che elimina il contenuto troppo presto e ci mette tempo a caricare l'immagine successiva (credo a causa del timer di delay), invece di tenerla li ferma per un pò e svuotare il container immediatamente prima di caricare quella dopo.
Questo problema è ancora più evidente quando si stoppa il timer e si utilizzano i bottoni previous e next: vorrei che l'immagine si bloccasse e il container si svuotasse solamente premendo uno dei due bottoni!
Spero di aver reso l'idea 
Qualcuno mi saprebbe aiutare?
Grazie in anticipo!
p.s. ecco qui il codice completo
codice:
import caurina.transitions.Tweener;
const TIMER_DELAY:int = 3000;
const FADE_TIME:Number = 1;
var bolPlaying:Boolean = true;
var currentContainer:Sprite;
var intCurrentSlide:int = -1;
var intSlideCount:int;
var slideTimer:Timer;
var sprContainer1:Sprite;
var sprContainer2:Sprite;
var slideLoader:Loader;
var strLink:String = "";
var strTarget:String = "";
var strXMLPath:String = "list.xml";
var xmlLoader:URLLoader;
var xmlSlideshow:XML;
function initSlideshow():void {
buttons.visible = false;
linkButton.visible = false;
xmlLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE, onXMLLoadComplete);
xmlLoader.load(new URLRequest(strXMLPath));
slideTimer = new Timer(TIMER_DELAY);
slideTimer.addEventListener(TimerEvent.TIMER, nextSlide);
sprContainer1 = new Sprite();
sprContainer2 = new Sprite();
images.addChild(sprContainer1);
images.addChild(sprContainer2);
currentContainer = sprContainer2;
linkButton.addEventListener(MouseEvent.CLICK, goToWebsite);
buttons.plButton.addEventListener(MouseEvent.CLICK, togglePause);
buttons.stpButton.addEventListener(MouseEvent.CLICK, togglePause);
buttons.nextButton.addEventListener(MouseEvent.CLICK, nextSlide);
buttons.prevButton.addEventListener(MouseEvent.CLICK, previousSlide);
buttons.plButton.visible = false;
}
function onXMLLoadComplete(e:Event):void {
buttons.visible = true;
linkButton.visible = true;
xmlSlideshow = new XML(e.target.data);
intSlideCount = xmlSlideshow..image.length();
switchSlide(0);
}
function fadeSlideIn(e:Event):void {
addSlideContent();
Tweener.addTween(currentContainer, {alpha:1, time:FADE_TIME, onComplete:onSlideFadeIn});
}
function onSlideFadeIn():void {
if(bolPlaying && !slideTimer.running)
slideTimer.start();
currentContainer.removeChildAt(0);
}
function togglePause(e:MouseEvent):void {
if(bolPlaying) {
buttons.plButton.visible = true;
buttons.stpButton.visible = false;
bolPlaying = false;
slideTimer.stop();
} else {
buttons.plButton.visible = false;
buttons.stpButton.visible = true;
bolPlaying = true;
slideTimer.reset();
slideTimer.start();
}
}
function switchSlide(intSlide:int):void {
if(!Tweener.isTweening(currentContainer)) {
if(slideTimer.running)
slideTimer.stop();
intCurrentSlide = intSlide;
if(currentContainer == sprContainer2)
currentContainer = sprContainer1;
else
currentContainer = sprContainer2;
currentContainer.alpha = 0;
images.swapChildren(sprContainer2, sprContainer1);
clearLoader();
slideLoader = new Loader();
slideLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, fadeSlideIn);
slideLoader.load(new URLRequest(xmlSlideshow..image[intCurrentSlide].@src));
strLink = xmlSlideshow..image[intCurrentSlide].@link;
strTarget = xmlSlideshow..image[intCurrentSlide].@target;
}
}
function goToWebsite(e:MouseEvent):void {
if(strLink != "" && strLink != null) {
navigateToURL(new URLRequest(strLink), strTarget);
}
}
function nextSlide(e:Event = null):void {
if(intCurrentSlide + 1 < intSlideCount)
switchSlide(intCurrentSlide + 1);
else
switchSlide(0);
}
function previousSlide(e:Event = null):void {
if(intCurrentSlide - 1 >= 0)
switchSlide(intCurrentSlide - 1);
else
switchSlide(intSlideCount - 1);
}
function clearLoader():void {
try {
var li:LoaderInfo = slideLoader.contentLoaderInfo;
if(li.childAllowsParent && li.content is Bitmap){
(li.content as Bitmap).bitmapData.dispose();
}
} catch(e:*) {}
}
function addSlideContent():void {
while(currentContainer.numChildren){Bitmap(currentContainer.getChildAt(0)).bitmapData.dispose(); currentContainer.removeChildAt(0);}
var bitMp:Bitmap = new Bitmap(Bitmap(slideLoader.contentLoaderInfo.content).bitmapData.clone());
currentContainer.addChild(bitMp);
}
initSlideshow();