Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Flexer
    Registrato dal
    Feb 2008
    Messaggi
    12

    Caricamento dinamico immagini AS3

    Buona sera a tutti,
    stò tentando di creare uno slide di immagini infinito.. in pratica le immagini entrano nello stage in fila indiana e terminato l'ingresso dell'ultima immagine si riparte da capo senza stacco.
    Gli indirizzi delle immagini sono caricati dinamicamente da un file XML.
    Per concludere esistono tanti file XML quanti sono i nostri clienti così ho deciso di passare da HTML l'ID del cliente.
    Il tutto funziona magnificamente peccato che quando vado ad inserire il filmato sulla pagina HTML si blocca al caricamento della prima immagine... o meglio alla creazione della prima Bitmap

    Qui sotto il codice interessato

    codice:
    var idAssociato:String = LoaderInfo(this.root.loaderInfo).parameters.associato; 
    
    var xml:XML;
    var images:Array = new Array();
    var imgUrl:Array = new Array();
    var imgName:Array = new Array();
    var totalImages:Number;
    var nbDisplayed:Number = 3;
    var imagesLoaded:int = 0;
    var slideTo:int = 0;
    var imageWidth:int = 185; 
    var vel:int = -1; //imposto la velocità e direzione
    var posSin:int = 0; //imposto la posizione iniziale
    var dimImm:int = 184; //imposto la posizione iniziale
    var posDes:int; //affianco i mc
    
    function loadXML(file:String):void{
    	var xmlLoader:URLLoader = new URLLoader();
    	xmlLoader.load(new URLRequest(file));
    	xmlLoader.addEventListener(Event.COMPLETE, parseXML);
    }
    
    function parseXML(e:Event):void{
    	xml = new XML(e.target.data);
    	totalImages = xml.children().length();
    	posDes = totalImages-1;
    	loadImages();
    }
    
    function loadImages():void{
    	for(var i:int = 0; i<totalImages; i++){
    		var loader:Loader = new Loader();
    		loader.load(new URLRequest(String(xml.children()[i].@src)));
    		images.push(loader);
    		imgUrl.push(String(xml.children()[i].@url));
    		imgName.push(String(xml.children()[i].@nome));
    	    loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
    	}
    }
    
    function onComplete(e:Event):void{
    	imagesLoaded++;
    	if(imagesLoaded == totalImages){
    		createImages();
    	}
    }
    
    function createImages():void{
    	for(var i:int = 0; i < images.length; i++){
                    var bm:Bitmap = createBitmap(i); 
    		var mc:MovieClip = createMovieClip(i,bm);
    		drawName(i,mc);
    		drawBorder(mc);
    		addChild(mc);
    	}
    }
    
    function drawName(i:int, mc:MovieClip) {
    	var myFont = new Font1();
    	
    	var myFormat:TextFormat = new TextFormat();
    	myFormat.align = TextFormatAlign.CENTER;
    	myFormat.font = myFont.fontName;
    	myFormat.bold = true;
    	myFormat.size = 11;
    	
    	var txt:TextField = new TextField();
    	txt.defaultTextFormat = myFormat;
    	
    	txt.text = imgName[i];
    	txt.backgroundColor = 0xFFFFFF;
    	txt.background = true;
    	txt.textColor = 0x003399;
    	txt.x = 0;
    	txt.y = 112;
    	txt.width = 170;
    	txt.height = 17;
    	mc.addChild(txt);
    }
    
    function drawBorder(mc:MovieClip):void {
    	var square:Sprite = new Sprite();
    	square.graphics.lineStyle(1,0x999999);
    	square.graphics.drawRoundRect(0,0,169,128,4);
    	square.graphics.endFill();
    	square.x = 0;
    	square.y = 0;
    	mc.addChild(square);
    }
    
    function createBitmap(i:int):Bitmap {
    	var bm:Bitmap = new Bitmap();
    	bm = Bitmap(images[i].content);
    	bm.smoothing = true;
    	bm.x = 0;	
    	bm.y = 0;
    	
    	//Scala
    	if(bm.width > 170 && bm.height < 130) {
    		bm.width = 170;
    		bm.scaleY = bm.scaleX;
    	}
    	else if(bm.width < 170 && bm.height > 130) {
    		bm.height = 170;
    		bm.scaleX = bm.scaleY;
    	}
    	else if(bm.width > 170 && bm.height > 130) {
    		bm.width = 170;
    		bm.scaleY = bm.scaleX;
    		bm.height = 130;
    		bm.scaleX = bm.scaleY;
    	}
    
    	//centra in altezza
    	if(bm.height < 130) {
    		bm.y = (115-bm.height)/2
    	}
    
    	//centra in ampiezza
    	if(bm.width < 170) {
    		bm.x = (170-bm.width)/2
    	}
    
    	return bm;
    }
    
    function createMovieClip(i:int, bm:Bitmap):MovieClip {
    	var mc:MovieClip = new MovieClip();
    	mc.addEventListener(MouseEvent.CLICK, onBitmapClick);
    	mc.x = (i*imageWidth)+(i*10); 	
    	mc.y = 0;
    	mc.addChild(bm);
    	return mc;
    }
    
    loadXML("percorso_completo_non_visibile/vetrina.xml");
    
    addEventListener(Event.ENTER_FRAME, onNewFrame);
    addEventListener(MouseEvent.MOUSE_OVER, onStopMovie);
    addEventListener(MouseEvent.MOUSE_OUT, onPlayMovie);
    
    function onNewFrame(event:Event) {
    	
    	for(var i:int = 0; i < numChildren; i++){
    		var bm:MovieClip = MovieClip(getChildAt(i));
    		bm.x += vel; 
    	}
    	
    	if(numChildren > 0) {
    		var bm_sx:MovieClip = MovieClip(getChildAt(posSin));
    		var bm_dx:MovieClip = MovieClip(getChildAt(posDes));
    
    		if (vel>0 && bm_sx.x>0) {
    			bm_dx.x = bm_sx.x-dimImm;
    			posSin = posDes;
    			posDes--;
    			if (posDes == 0) {
    				posDes = totalImages-1;
    			}
    		}
    		if (vel<0 && bm_sx.x<=-dimImm) {
    			bm_sx.x = bm_dx.x+dimImm+10;
    			posDes = posSin;
    			posSin++;
    			if (posSin>(totalImages-1)) {
    				posSin = 0;
    			}
    		}
    	}
    }
    
    function onStopMovie(e:MouseEvent) {
    	vel = 0;
    }
    
    function onPlayMovie(e:MouseEvent) {
    	vel = -1;
    }
    
    function onBitmapClick(e:MouseEvent) {
    	var mc:MovieClip = MovieClip(e.target);
    	var i:int = getChildIndex(mc);
    	var req:URLRequest = new URLRequest(imgUrl[i]);
    	navigateToURL(req, "_self");
    }

  2. #2
    Utente di HTML.it L'avatar di Flexer
    Registrato dal
    Feb 2008
    Messaggi
    12
    Abbiate pazienza ma mancava la segnalazione finale:
    il punto esatto della creazione della Bitmap che non funziona è questo:

    bm = Bitmap(images[i].content);

    Grazie

  3. #3
    Utente di HTML.it L'avatar di Flexer
    Registrato dal
    Feb 2008
    Messaggi
    12
    AGGIORNAMENTO:

    eliminando la creazione delle immagini e mantenendo tutto il resto, il filmato funziona..
    Vengono creati i MovieClip e scorrono regolarmente.
    Ecchecavolo!!!!!!

  4. #4
    Utente di HTML.it L'avatar di Flexer
    Registrato dal
    Feb 2008
    Messaggi
    12
    FUNZIONA!!!!!!!
    Il problema era sui permessi della cartella contenente i file delle immagini.
    Risolto copiando la cartella sotto la struttura del sito.

    Ovviamente è un pagliativo però mi basta così.
    Se qualcuno conosce il modo per generalizzare il caricamento delle immagini è ben accetto.

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.