Sì, riconosco lo script...
Riguardo alla prima domanda, sì è normale che faccia uno o due undefined quando finisce il giro, ma nella pubblicazione questa cosa non si vede, è fatta apposta.
Lo script non è fatto per accettare immagini senza un numero progressivo, per questo hai problemi in tal senso ed è per questo che a suo tempo ho scritto una classe che accetta un array di nomi di immagini in entrata ed effettua lo slide sempre sulle stesse, senza quindi incorrere in errori di caricamento (salvo che i nomi di immagine contenuti nell'xml non siano fasulli).
La classe è questa (da salvare in un file SlideShow.as e inserire nella stessa cartella del fla su cui vuoi usarlo):
Codice PHP:
import mx.transitions.*;
import mx.transitions.easing.*;
class SlideShow {
private var __m:MovieClip;
private var __a:Array;
private var __d:Number;
private var __c:Number;
private var __w:Object;
private var __t:Number;
private var __actual:String;
private var __l:Object;
private var __ml:MovieClipLoader;
private var __l1:MovieClip;
private var __l2:MovieClip;
public var onLoadProgress:Function;
public var onLoadComplete:Function;
function SlideShow (t:MovieClip, a:Array, d:Number) {
__m = t;
__a = a;
__d = d;
__c = 0;
__w = {};
__w.path = this;
__l = {};
__l.path = this;
__ml = new MovieClipLoader ();
__l1 = __m.createEmptyMovieClip ("__l1", 1);
__l2 = __m.createEmptyMovieClip ("__l2", 2);
__init__ ();
}
private function __init__ () {
__listeners__ ();
__ml.loadClip (__a[__c],__l1);
__actual = '__l1';
}
private function __listeners__ () {
__l.onLoadProgress = function (m:MovieClip, l:Number, t:Number) {
this.path.onLoadProgress (m,l,t);
};
__l.onLoadInit = function (m:MovieClip) {
this.path.onLoadComplete (m);
var p:MovieClip = m == this.path.__l1 ? this.path.__l2 : this.path.__l1;
this.path.__fade__ (this.path.__l2,false);
var r:Object = this.path.__fade__ (m, true);
r.path = this.path;
r.onMotionFinished = function () {
_global.setTimeout (this.path.__loadOther__, this.path.__d*1000, this.path);
};
};
__ml.addListener (__l);
}
private function __loadOther__ (path) {
clearInterval (path.__t);
path.__c = path.__c >= path.__a.length-1 ? 0 : path.__c+1;
if (path.__actual == '__l1') {
path.__ml.loadClip (path.__a[path.__c],path.__l2);
} else {
path.__ml.loadClip (path.__a[path.__c],path.__l1);
}
path.__actual = path.__actual == '__l1' ? '__l2' : '__l1';
}
private function __fade__ (t:MovieClip, b:Boolean):Tween {
if (b) {
__w['t'+t._name] = new Tween (t, '_alpha', null, 0, 100, .5, true);
} else {
__w['t'+t._name] = new Tween (t, '_alpha', null, 100, 0, .5, true);
}
return __w['t'+t._name];
}
public function get loader ():MovieClip {
return __m[__actual];
}
public function get index ():Number {
return __c;
}
}
E si usa in questo modo:
Codice PHP:
// Class.SlideShow AS2
// creo un array vuoto e lo riempio con nomi di immagini da caricare dalla cartella "img"
var a:Array = [];
for (var i:Number=1; i<=10; i++) {
a.push ("img/thumb"+i+".jpg"); // nell'array avrò "img/thumb1.jpg" e così via
}
var mc:MovieClip = this.createEmptyMovieClip ("mc", 1); // creo un mc vuoto
// infine imposto uno slideshow passandogli i tre parametri ([contenitore delle thumbs], [array con i nomi], [durata di ogni transizione])
var s:SlideShow = new SlideShow (mc, a, 0.5);