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");
}