PDA

View Full Version : Parent / Child problem maybe? Not sure... HELP!



JoshDV
April 13th, 2007, 07:30 PM
Hi, I'm new to this board but I've looked around trying to find the answer to my problem and it sounds like I might actually find the answer. So here's the problem: I have a parent swf that loads 5 child swfs. Everything loads fine but after the xml loads the data there is no functionality on the child swfs other than the listen command to use the left and right keys to switch between images. The scrolling and buttons on the child swf become deactivated.

I've traced the problem to the activateButtons() function. I've tried modifying it with no luck. If I comment out the function then the child swf works and the parent swf doesn't.

I got the code for the parent swf online and I can't even remember where, but here it is (modified):



makeButtons();
import mx.transitions.Tween;
import mx.transitions.easing.*;
Object.Main = this;
var distanceMove = 545;
onLoad.moveButtons(0);
function galleryChoice(q) {
tArray = new Array();
my_xml = new XML();
for (var j = 0; j<curLength; j++) {
this.th_nav["thmb"+j].removeMovieClip();
}
my_xml.ignoreWhite = true;
my_xml.onLoad = function(loaded) {
if (loaded) {
gallery = this.firstChild.childNodes[q];
curLength = gallery.childNodes.length;
for (var i = 0; i<gallery.childNodes.length; i++) {
tArray.push(gallery.childNodes[i].attributes.movie);
}
}
delay = setInterval(makeButtons, 10);
};
my_xml.load("samples.xml");
}
function makeButtons() {
tnNr = 0;
clearInterval(delay);
for (var i = 0; i<tArray.length; i++) {
var thb = container.thumb.duplicateMovieClip("thmb"+i, 1000+i);
//
//trace(pArray[i]);
thb._x = 165+(i*48);
//container.thmb5.menuTitle
//trace(thb.menuTitle.text = pArray[i]);
thb.txt.text = pArray[i];
}
loadButtons();
}
function loadButtons() {
var tbox = container["thmb"+tnNr].box;
tbox.loadMovie(tArray[tnNr]);
temp = this.createEmptyMovieClip("tmp"+tnNr, 999);
temp.onEnterFrame = function() {
bt = tbox.getBytesTotal();
bl = tbox.getBytesLoaded();
if (bt == bl && bt>4) {
nextButton();
delete this.onEnterFrame;
} else {
activateButtons();
}
};
}
function nextButton() {
if (tnNr<tArray.length-1) {
tnNr++;
loadButtons();
} else {
activateButtons();
}
}
function activateButtons() {
for (var i = 0; i<tArray.length; i++) {
var but = container["thmb"+i];
but.id = i;
//trace(but.id);
but.onRelease = function() {
moveButtons(this.id);
lastPos=this.id;
};
but.onRollOut = function() {
//moveButtons2(this.id);

};
}
}
function moveButtons(pos) {

//trace(lastPos);
for (var j = 0; j<tArray.length; j++) {
startX = 165+(j*48);

if (j<=pos) {
var myTween:Tween = new Tween(container["thmb"+j], "_x", mx.transitions.easing.Strong.easeOut, container["thmb"+j]._x, startX, 3, true);
} else {
var myTween:Tween = new Tween(container["thmb"+j], "_x", mx.transitions.easing.Strong.easeOut, container["thmb"+j]._x, startX+distanceMove, 3, true);
}
}
}
function moveButtons2() {
for (var j = 0; j<tArray.length; j++) {
startX = 165+(j*65);
var myTween:Tween = new Tween(container["thmb"+j], "_x", mx.transitions.easing.Strong.easeOut, container["thmb"+j]._x, startX, 1, true);
}
}
galleryChoice(0);


Here is the child swf code:



function loadXML(loaded) {
if (loaded) {
xmlNode = this.firstChild;
image = [];
description = [];
thumbnails = [];
total = xmlNode.childNodes.length;
for (i=0; i<total; i++) {
image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
description[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
thumbnails[i] = xmlNode.childNodes[i].childNodes[2].firstChild.nodeValue;
thumbnails_fn(i);
}
firstImage();
} else {
content = "file not loaded!";
}
}
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("web.xml");
/////////////////////////////////////
listen = new Object();
listen.onKeyDown = function() {
if (Key.getCode() == Key.LEFT) {
prevImage();
} else if (Key.getCode() == Key.RIGHT) {
nextImage();
}
};
Key.addListener(listen);
previous_btn.onRelease = function() {
prevImage();
};
next_btn.onRelease = function() {
nextImage();
};
/////////////////////////////////////
p = 0;
this.onEnterFrame = function() {
filesize = picture.getBytesTotal();
loaded = picture.getBytesLoaded();
preloader._visible = true;
if (loaded != filesize) {
preloader.preload_bar._xscale = 100*loaded/filesize;
} else {
preloader._visible = false;
if (picture._alpha<100) {
picture._alpha += 7;
}
}
};
function nextImage() {
if (p<(total-1)) {
p++;
if (loaded == filesize) {
picture._alpha = 0;
picture.loadMovie(image[p], 1);
desc_txt.text = description[p];
picture_num();
}
}
}
function prevImage() {
if (p>0) {
p--;
picture._alpha = 0;
picture.loadMovie(image[p], 1);
desc_txt.text = description[p];
picture_num();
}
}
function firstImage() {
if (loaded == filesize) {
picture._alpha = 0;
picture.loadMovie(image[0], 1);
desc_txt.text = description[0];
picture_num();
}
}
function picture_num() {
current_pos = p+1;
pos_txt.text = current_pos+" / "+total;
}
function thumbNailScroller() {
// thumbnail code!
this.createEmptyMovieClip("tscroller", 1000);
scroll_speed = 7;
tscroller.onEnterFrame = function() {
if ((_root._ymouse>=thumbnail_mc._y) && (_root._ymouse<=thumbnail_mc._y+thumbnail_mc._height)) {
if ((_root._xmouse>=(hit_right._x-40)) && (thumbnail_mc.hitTest(hit_right))) {
thumbnail_mc._x -= scroll_speed;
} else if ((_root._xmouse<=(hit_left._x+40)) && (thumbnail_mc.hitTest(hit_left))) {
thumbnail_mc._x += scroll_speed;
}
} else {
delete tscroller.onEnterFrame;
}
};
}
function thumbnails_fn(k) {
thumbnail_mc.createEmptyMovieClip("t"+k, thumbnail_mc.getNextHighestDepth());
tlistener = new Object();
tlistener.onLoadInit = function(target_mc) {
target_mc._x = hit_left._x+(target_mc._width+5)*k;
target_mc.pictureValue = k;
target_mc.onRelease = function() {
p = this.pictureValue-1;
nextImage();
};
target_mc.onRollOver = function() {
this._alpha = 50;
thumbNailScroller();
};
target_mc.onRollOut = function() {
this._alpha = 100;
};
};
image_mcl = new MovieClipLoader();
image_mcl.addListener(tlistener);
image_mcl.loadClip(thumbnails[k], "thumbnail_mc.t"+k);
}



I really appreciate any help I can get, and this is really urgent. THANKS!

-JoshDV

webreake
April 13th, 2007, 09:22 PM
i cant see problems , did your child swf works standalone?
if so maybe is a problem of scopes in the code of your child movie, some _root or similar, try improving the code with relative reference using the "this" keyword

JoshDV
April 13th, 2007, 09:36 PM
i cant see problems , did your child swf works standalone?
if so maybe is a problem of scopes in the code of your child movie, some _root or similar, try improving the code with relative reference using the "this" keyword


They both work perfectly fine independantly. I tried going nuts using this. or _root. or _leveln. but with no luck. After troubleshooting the hell out of it I found that this code:



function activateButtons() {
for (var i = 0; i<tArray.length; i++) {
var but = bt_p["thmb"+i];
but.id = i;
//trace(but.id);
but.onRelease = function() {
moveButtons(this.id);
lastPos=this.id;
};
but.onRollOut = function() {
//moveButtons2(this.id);

};
}
}
that one function is what stops the child swfs from working. Without it however the parent swf buttons become disabled. The button functions themselves seem to work fine, it's just that one piece of code that seems to break it.

With that function commented out, the child swf is fully operational, but the buttons on the parent swf won't function. Once that function is turned back on, the parent swf functions but the child swf only can be controlled with the keyboard.

JoshDV

JoshDV
April 15th, 2007, 04:16 PM
I'm not completely sure if it's the activatebuttons function that stops it form working. All i know is that when activatebuttons is disabled the child swfs work, but the parent swf can't switch between them.

HELP!!!

JoshDV

JoshDV
April 16th, 2007, 12:33 AM
Here are my FLA files being used. I've updated the script a little bit in an attempt to figure out the problem, but it's still not working.

JoshDV