Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    15

    [AS3]Problema slideshow e removeChild

    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();

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    15
    nessuno?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.