I’m trying to make the Photo Gallery tutorial (http://www.kirupa.com/developer/mx/photogallery.htm) work using an imported .txt file to create my list of images. I can import the .txt file (myImages= “image0.jpg”, “image1.jpg”, “image2.jpg”) but I can’t figure out how to make Flash see it as an array rather than just a string of text.
My aim is to create a slideshow in which the image .jpgs and their names are both in easily updated in external files so I can add to the presentation without modifying the .swf file.
The script solves my original problem of making the imported text file into an array (just as you said it would) but I can’t get that array to replace the array in the original slide gallery turtorial. I get an error opening the URL to the files (even though I haven’t moved them).
Below is the code as it stands. The first part is your code. The second is from the slide gallery tutorial. The only part of the slide gallery code I modified was to comment out (//) the line that originally listed the image names //this.pArray = [“image0.jpg”, “image1.jpg”, “image2.jpg”, “image3.jpg”, “image4.jpg”, “image5.jpg”, “image6.jpg”, “image7.jpg”, “image8.jpg”, “image9.jpg”];
If you see an obvious error here without spending too much of your valuable time I’d appreciate it.
Thanks again, Cliff
Array = new Array();
loadArray = new LoadVars();
loadArray.load(“imageList.txt”);
loadArray.onLoad = function(success) {
if (success) {
pArray = this.myImages.split(“,”);
trace(pArray)
}
};
// variables ------------------------------------------
// put the path to your pics here, include the slashes (ie. “pics/”)
// leave it blank if they’re in the same directory
this.pathToPics = “animation/”;
// fill this array with your pics //this.pArray = [“image0.jpg”, “image1.jpg”, “image2.jpg”, “image3.jpg”, “image4.jpg”, “image5.jpg”, “image6.jpg”, “image7.jpg”, “image8.jpg”, “image9.jpg”];
this.fadeSpeed = 20;
this.pIndex = 0;
// MovieClip methods ----------------------------------
// d=direction; should 1 or -1 but can be any number
//loads an image automatically when you run animation
loadMovie(this.pathToPics+this.pArray[0], _root.photo);
MovieClip.prototype.changePhoto = function(d) {
// make sure pIndex falls within pArray.length
this.pIndex = (this.pIndex+d)%this.pArray.length;
if (this.pIndex<0) {
this.pIndex += this.pArray.length;
}
this.onEnterFrame = fadeOut;
};
MovieClip.prototype.fadeOut = function() {
if (this.photo._alpha>this.fadeSpeed) {
this.photo._alpha -= this.fadeSpeed;
} else {
this.loadPhoto();
}
};
MovieClip.prototype.loadPhoto = function() {
// specify the movieclip to load images into
var p = _root.photo;
//------------------------------------------
p._alpha = 0;
p.loadMovie(this.pathToPics+this.pArray[this.pIndex]);
this.onEnterFrame = loadMeter;
};
MovieClip.prototype.loadMeter = function() {
var i, l, t;
l = this.photo.getBytesLoaded();
t = this.photo.getBytesTotal();
if (t>0 && t == l) {
this.onEnterFrame = fadeIn;
} else {
trace(l/t);
}
};
MovieClip.prototype.fadeIn = function() {
if (this.photo._alpha<100-this.fadeSpeed) {
this.photo._alpha += this.fadeSpeed;
} else {
this.photo._alpha = 100;
this.onEnterFrame = null;
}
};
// Actions -----------------------------------------
// these aren’t necessary, just an example implementation
this.onKeyDown = function() {
if (Key.getCode() == Key.LEFT) {
this.changePhoto(-1);
} else if (Key.getCode() == Key.RIGHT) {
this.changePhoto(1);
}
};
Key.addListener(this);
[COLOR=Magenta][COLOR=Indigo][/COLOR][COLOR=Red]//this.pArray = [“image0.jpg”, “image1.jpg”, “image2.jpg”, “image3.jpg”, “image4.jpg”, “image5.jpg”, “image6.jpg”, “image7.jpg”, “image8.jpg”, “image9.jpg”];
[/COLOR]
doesn’t work, cause at the moment it calls pArray, it doesn’t exists. Skip that line. If you want a picture at start, change the load text code like this:
pArray = new Array();
loadArray = new LoadVars();
loadArray.load("imageList.txt");
loadArray.onLoad = function(success) {
if (success) {
pArray = this.myImages.split(",");
changePhoto(0);//added this one
}
};
I found the problem. It was my mistake in the .txt file. My original .txt file was as follows: myImages=“image0.jpg”,“image1.jpg”,“image2.jpg”,“image3.jpg”,“image4.jpg”,“image5.jpg”,“image6.jpg”,“image7.jpg”,“image8.jpg”,“image9.jpg” When I got rid of the quotation marks it worked just as you said it would.
Thanks so much for your help on this. I appreciate it very much.
Thanks again for wrapping up this thread with Cliff. It helped…stupid quotation marks…lol. Not sure if you can shed any light on this but…taking this a few steps further, if you wanted to load the array from an XML file could you write a node in the xml file like LIST="image0.jpg,image1.jpg,image2.jpg,image3.jpg,image4.jpg,image5.jpg,image6.jpg,image7.jpg,image8.jpg,image9.jpg,image10.jpg"
and in the example :
this.pathToPics = “animation/”;
// fill this array with your pics
Array = new Array();
loadArray = new LoadVars();
loadArray.load(“imageList.txt”);
loadArray.onLoad = function(success) {
if (success) {
pArray = this.myImages.split(",");
trace(pArray)
}
};
after loading the xml file in flash replace “imageList.txt” with ummmmm well, I guess that’s my question… I am not sure just how to load that particular node into flash and use it. I can load txt into txt boxes and load single images into MC’s but my skills stop there as it were. I can elaborate on the project i’d like to finish if it helps.
Scotty, you are truly the bomb! i have read hundreds of posts here in the past few days, and you rule. You’re always there with the answers. You’re like “Web-Gandhi”! Thanks, thanks thanks!
Ok, I know I am in trouble of becoming a pest but if I wanted to show the “title” in a textbox for each image, how would you do that. I have a hunch it’s quite simple and I have tried to make it work, but i think i have missed the boat on that. i tried doing this, thinking i was all smart now, but was quickly put in my proper place
this.pathToPics = “animation/”;
// fill this array with your pics
var gallery_xml = new XML();
timeline = this;
gallery_xml.ignoreWhite = true;
gallery_xml.onLoad = function(success) {
if (success) {
var gallery = this.firstChild;
pArray = new Array();
nodes = gallery.childNodes
for (var i = 0; i<gallery.childNodes.length; i++) {
pArray.push(gallery.childNodes*.attributes.source);
this.timeline[“title_txt”+i].text = nodes*.attributes.title
changePhoto(0);
}
} else {
title_txt.text = “XML Load Error”;
}
};
Can ya help me or tell me to “forget about it kid, you’ll never make it” ?
Wow, “It’s in the computer?..it’s so simple” Thanks loads peeps! Gonna try some crazy stuff now…so block me from your emails…there’s bound to be questions…LOL