Ændring i pyromans slideshow
Jeg har rodet lidt med pyromans flash/xml slideshow (http://actionscript.dk/artikler/?a=35) og det virker fint. Men jeg kunne godt tænke mig, at billederne fadede over i hinanden, istedet for at fade helt ud og så ind igen.Er der et kvikt hovede herinde der kan hjælpe med det? Jeg har prøvet at pille lidt ved alpha indstillingerne i tonUd functionen, men så kunne man se de tidligere billeder ses igennem de andre.
------ Fuld kode ------
// Variabler der kan ændres
var xmlSti:String = "slideshow.xml";
var alphaSkridt:Number = 5; // Værdi _alpha skal ændres med ved ind-/udtoning
// Variabel erklæringer
var xmlKilde:XML; // Holder XML-objektet
var billedeHenter:MovieClipLoader; // Hollder MovieClipLoader-objektet
var billeder:Array; // Holder stierne til billederne
var nummerNu:Number; // Nummer billede der skal vises/bliver vist nu
var sidsteNummer:Number; // Nummer billede der sidst blev vist/skal udtones
var tonInd:Boolean = false; // Angiver om billedet skal tones ind
var tonUd:Boolean = false; // Angiver om sidste billede skal tones ud
var henter:Boolean = false; // Angiver om der hentes et billede
// Initialiserer slideshowet - indlæser variabler
function init() {
billeder = []; // Opretter et array til at holde stierne til billederne
billedeHenter = new MovieClipLoader(); // Objekt til at hente billeder
billedeHenter.addListener(this); // Bruger dette movieclip som Listener
xmlKilde = new XML(); // Opretter et nyt XML objekt
xmlKilde.ignoreWhite = true; // Skal ignorere blanktegn
// funktionen xmlLoadHandler skal kaldes når XML-filen er blevet hentet
xmlKilde.onLoad = xmlLoadHandler;
xmlKilde.load(xmlSti); // Henter xml-filen
// Kalder funktionen forigeBillede() når der klikkes på venstreKnap
venstrePil.onRelease = forigeBillede;
// Kalder funktionen naesteBillede() når hojreKnap klikkes
hojrePil.onRelease = naesteBillede;
loadingBar._visible = false; // Skjuler loadingbaren
}
// Viser billedet med pågældende nummer
function visBillede(nummer:Number) {
// Hvis der tones ud, skal det billede der tones ud bare skjules helt
if(tonUd) {
this["img" + sidsteNummer]._alpha = 0;
}
// Hvis billedet er hentet så ton det frem
if (this["img" + nummer]) {
tonInd = true;
}
// Hvis der ikke er et billede hentet endnu så hent det
if (nummerNu == undefined) {
hentBillede(nummer);
} else {
// Ton ud og vent på at billedet bliver hentet
sidsteNummer = nummerNu;
tonUd = true;
}
nummerNu = nummer;
}
// Henter billede med pågældende nummer
function hentBillede(nummer:Number) {
// Hvis den allerede er i gang med at hente et billede, så
// annuller dette
if(henter){
billedeHenter.unloadClip(this["img" + nummerNu]);
this["img" + nummerNu].removeMovieClip();
}
// Opret et nyt movieclip til at hente billedet ind i
var mc = createEmptyMovieClip("img" + nummer, nummer);
// Hent billedet ind i movieclippet
billedeHenter.loadClip(billeder[nummer], mc);
henter = true;
loadingBar._visible = true; // Vis loadingbaren
loadingBar._xscale = 0;
}
// Viser næste billede
function naesteBillede() {
var num = nummerNu;
// Hvis nuværende billede er det sidste, start forfra
if(++num == billeder.length) {
num = 0;
}
visBillede(num);
}
// Viser forige billede
function forigeBillede() {
var num = nummerNu;
// Hvis nuværende billede er det første, spring til det sidste
if(--num < 0) {
num = billeder.length - 1;
}
visBillede(num);
}
// Funktion der kaldes i hvert frame
function onEnterFrame() {
// Hvis der skal tones ind
if (tonInd) {
// Toner nuværende billede ind
this["img" + nummerNu]._alpha += alphaSkridt;
if(this["img" + nummerNu]._alpha >= 100) {
this["img" + nummerNu]._alpha = 100;
tonInd = false;
}
}
// Hvis der skal tones ud
if (tonUd) {
// Toner sidste billede ud
this["img" + sidsteNummer]._alpha -= alphaSkridt;
if(this["img" + sidsteNummer]._alpha <= 0){
this["img" + sidsteNummer]._alpha = 0;
// Hvis næste billede ikke er hentet, så hent det
if (!this["img" + nummerNu]) {
hentBillede(nummerNu);
}
tonUd = false;
}
}
if (henter) {
var mc = this["img" + nummerNu];
var bytesLoaded = mc.getBytesLoaded();
var bytesTotal = mc.getBytesTotal();
// bytesTotal kan være 0 eller -1, hvis den ikke er begyndt at
// hente endnu, dette vil give fejl, og derfor skal percentLoaded
// bare sættes til 0
var percentLoaded = bytesTotal > 0 ? bytesLoaded/bytesTotal*100 : 0;
// Skalér loadingbaren mens der hentes
loadingBar._xscale = percentLoaded;
}
}
// Kaldes når XML-filen er hentet
function xmlLoadHandler(success) {
// Hvis filen blev hentet ordentligt
if (success) {
// Finder alle <image> tag'sene
var billedNodes:Array = this.firstChild.childNodes;
var i:Number;
// Finder alle stierne til billederne og lægger dem i 'billeder'
for (i=0; i<billedNodes.length; i++) {
billeder.push(billedNodes[i].attributes.src);
}
visBillede(0); // Viser første billede
}
}
// Kaldes når et billede er hentet
function onLoadInit(targetMC:MovieClip) {
targetMC._alpha = 0; // Skjuler billedet
tonInd = true; // Starter med at tone billedet ind
henter = false;
loadingBar._visible = false; // Skjuler loadingBaren
}
// Kalder initialiseringsfunktionen og starter slideshowet
init();
