Har laddat ner denna "slideshow" för lite tester (är novis på flash), och har fått det fungera halvvägs.
Det jag vill är att ha flera lager i flashen, säg 5st, och att slideshowen ligger i det understa lagret. Men som det är nu lägger den sig alltid överst även om jag lägger scritptet i det understa lagret.
Nån som vet hur man gör (om det går) så det blir som jag vill ha det?
// set random # variables - each must be 0 for first 'while' loop below
var randomNum = 0;
var randomNumLast = 0;
// parent container
var container_mc = this.createEmptyMovieClip("container",0);
// movie clip containers
container_mc.createEmptyMovieClip("loader1_mc",2);
container_mc.createEmptyMovieClip("loader2_mc",1);
// preload watcher
this.createEmptyMovieClip("watcher_mc",100);
// load xml
images_xml = new XML();
images_xml.ignoreWhite=true;
images_xml.onLoad = parse;
images_xml.load("images.xml");
function parse(success) {
if (success) {
imageArray = new Array();
var root = this.firstChild;
_global.numPause = Number(this.firstChild.attributes.timer * 1000);
_global.order = this.firstChild.attributes.order;
_global.looping = this.firstChild.attributes.looping;
_global.fadetime = Number(this.firstChild.attributes.fadetime);
_global.xpos = Number(this.firstChild.attributes.xpos);
_global.ypos = Number(this.firstChild.attributes.ypos);
var imageNode = root.lastChild;
var s=0;
while (imageNode.nodeName != null) {
imageData = new Object;
imageData.path = imageNode.attributes.path;
imageArray[s]=imageData;
imageNode = imageNode.previousSibling;
s++;
}
// place parent container
container_mc._x = _global.xpos;
container_mc._y = _global.ypos;
// parse array
imageArray.reverse();
imageGen(imageArray);
} else {
trace('problem');
}
}
// depth swapping
function swapPlace(clip,num) {
eval(clip).swapDepths(eval("container_mc.loader"+num+"_mc"));
}
function loadImages(data,num) {
if (i==undefined || i == 2) {
i=2;
createLoader(i,data,num);
i=1;
} else if (i==1) {
createLoader(i,data,num);
i=2;
}
}
function createLoader(i,data,num) {
thisLoader=eval("container_mc.loader"+i+"_mc");
thisLoader._alpha=0;
thisLoader.loadMovie(data[num].path);
watcher_mc.onEnterFrame=function () {
var picLoaded = thisLoader.getBytesLoaded();
var picBytes = thisLoader.getBytesTotal();
if (isNaN(picBytes) || picBytes < 4) {
return;
}
if (picLoaded / picBytes >= 1) {
swapPlace("container_mc.loader2_mc",1);
alphaTween = new mx.transitions.Tween(thisLoader, "_alpha", mx.transitions.easing.Regular.easeOut,0,100,_global.fadetime,true);
timerInterval = setInterval(imageGen,_global.numPause,data);
delete this.onEnterFrame;
}
}
}
function imageGen(data) {
// random, or sequential?
if (_global.order=="random") {
// choose random # between 0 and total number of images
while (randomNum == randomNumLast) {
randomNum = Math.floor(Math.random() * data.length);
trace(randomNum);
}
loadImages(data,randomNum);
randomNumLast = randomNum;
} else if (_global.order=="sequential") {
// start at 0, increment to total number of images, then drop back to zero when done
if (p==undefined || p==data.length && _global.looping=="yes") { p=0; } else { break; }
loadImages(data,p);
p++;
} else {
trace ("order attribute in xml isn't correct - must specify either 'random' or 'sequential'");
}
clearInterval(timerInterval);
}
stop();
Då du skapar med flash som ett grafikverktyg så använder du dig av lager, men med innehåll skapat av kod så är det djup som gäller.
Om du använder tex createEmptyMovieClip eller duplicateMovieClip så kommer de normalt hamna över allt annat innehåll.
Så det kan vara lite bökigt att kombinera manuellt och kodat inehåll.
Du skulle kunna göra "container_mc" och de andra clips som skapas med kod nu för hand istället, men då koden använder swapDepth så är det inte en smidig lösning.
Förmodligen får du använda duplicateMovieClip för att flytta upp det innehåll som skall vara på ett högre djup.
Tex göra det som skall ligga på lager5 till ett mc och sedan använda duplicateMovieClip...tex:
lager5.duplicateMovieClip("lager5Kopia", 5);
lager5._visible=false;
Det skall ligga på samma keyframe som inhehållet skall visas på. Lager spelar ingen roll...normalt håller jag all frame kod på ett dedikerat kod lager.
Är du säker på att du döpt clippet korrekt?
Med "lager5.duplicateMovieClip("lager5Kopia", 5);" menar du då namnet på lagret eller namnet på "objektet" som jag gjort om till MovieClip? För det är väl "Instance Name" som är själva namnet på objektet?