-
Why am I losing my array?
I have a problem with accessing an array from a function within a function in a custom class...I have a function that uses the array booths[]...the function calls a zoom function which runs on a tween...then there is a function for when the tween finishes...however...after the zoom completes tracing the booths[] array still returns the correct values...once I enter the tweenFinished function...the booths[] array returns undefined for all values...I have 7 traces strewn threw my code here and it shows exactly when the problem occurs...can anyone help me solve this?
code:
function listClick(boothArr:Array)
{
var lowX:Number = booths[boothArr[0]].xValue;
var lowY:Number = booths[boothArr[0]].yValue;
var tarX:Number;
var tarY:Number;
var highX:Number = booths[boothArr[0]].xValue + booths[boothArr[0]]._width;
var highY:Number = booths[boothArr[0]].yValue + booths[boothArr[0]]._height;
var myPoint:Object = {x:0, y:0};
var myPoint2:Object = {x:0, y:0};
var centerWinX:Number;
var centerWinY:Number;
var tempX:Number;
var tempY:Number;
var boothX:Number;
var boothY:Number;
var boothOffsetX:Number;
var boothOffsetY:Number;
var moveX:Number;
var moveY:Number;
var zoomTo:Number;
for(var i=0; i<boothArr.length; i++)
{
var booth:Number = boothArr[i];
var trans5:Transform = new Transform(booths[booth]);
var trans6:Transform = new Transform(miniBooths[booth]);
var myColor:ColorTransform = new ColorTransform(1, 1, 1, 1, 0, 255, -255, 50);
trans5.colorTransform = trans6.colorTransform = myColor;
booths[booth].boothLight = true;
trace("1 "+ booths[0].xValue+ " "+booths[0].yValue);
if(boothArr.length > 1)
{
if(booths[booth].xValue<lowX)
{
lowX = booths[booth].xValue;
}
if(booths[booth].yValue<lowY)
{
lowY = booths[booth].yValue;
}
if((booths[booth].xValue + booths[booth]._width)>highX)
{
highX = booths[booth].xValue + booths[booth]._width;
}
if((booths[booth].yValue + booths[booth]._height)>highY)
{
highY = booths[booth].yValue + booths[booth]._height;
}
}
else
{
lowX = highX = booths[booth].xValue;
lowY = highY = booths[booth].yValue;
}
}
if(lowX == highX && lowY == highY)
{
tempX = lowX;
tempY = lowY;
boothOffsetX = booths[booth]._width/2;
boothOffsetY = booths[booth]._height/2;
}
else
{
tempX = (highX + lowX)/2;
tempY = (highY + lowY)/2;
boothOffsetX = 0;
boothOffsetY = 0;
}
if(boothArr.length > 1)
{
var zoomArea:Number;
var tempVar:Number;
if((highX-lowX) > (highY-lowY))
{
zoomArea = highX-lowX;
zoomTo = (_root.hitAreaMain._width*70)/zoomArea;
}
else
{
zoomArea = highY-lowY;
zoomTo = (_root.hitAreaMain._height*70)/zoomArea;
}
}
else
{
zoomTo = (_root.hitAreaMain._width*10)/booths[boothArr[0]].zoomScale;
}
_root.hitAreaMain.localToGlobal(myPoint2);
centerWinX = myPoint2.x + (_root.hitAreaMain._width/2);
centerWinY = myPoint2.y + (_root.hitAreaMain._height/2);
trace("2 "+ booths[0].xValue+ " "+booths[0].yValue);
_root.scaleTo(zoomTo);
trace("3 "+ booths[0].xValue+ " "+booths[0].yValue);
//trace(zoomTo);
_root.tween_handler.onMotionFinished = function()
{
trace("4 "+ booths[0].xValue+ " "+booths[0].yValue);
//trace(zoomTo);
_root.container.localToGlobal(myPoint);
boothX = ((((tempX+boothOffsetX)/100)*zoomTo)+myPoint.x);
boothY = ((((tempY+boothOffsetY)/100)*zoomTo)+myPoint.y);
moveX = (centerWinX - boothX);
moveY = (centerWinY - boothY);
trace("5 "+ booths[0].xValue+ " "+booths[0].yValue);
_root.checkBounds(moveX, moveY, 1, 0);
trace("6 "+ booths[0].xValue+ " "+booths[0].yValue);
_root.tween_handler.onMotionFinished = function()
{
trace("7 "+ booths[0].xValue+ " "+booths[0].yValue);
_root.container.localToGlobal(myPoint);
for(var j=0; j<boothArr.length; j++)
{
//var b:Number = boothArr[j];
//trace("2 "+tAx[j]+ " " +tAy[j]);
//tarX = tAx[j]*(zoomTo/100)+myPoint.x;
//tarY = tAy[j]*(zoomTo/100)+myPoint.y;
//_root.placeTarget(tarX, tarY, j);
// _root.placeTarget((boothX+_root.actualMoveX-(boothOffsetX*(zoomTo/100))), (boothY+_root.actualMoveY-(boothOffsetY*(zoomTo/100))), i);
}
_root.numTargets = boothArr.length;
}
}
}
trace output:
1 2122.5 1110
2 2122.5 1110
3 2122.5 1110
4 undefined undefined
5 undefined undefined
6 undefined undefined
7 undefined undefined
any ideas?
-
Show in the dark as I did this quickly:
PHP Code:
function listClick(boothArr:Array) {
_global.booths = booths;// Add this
var lowX:Number=booths[boothArr[0]].xValue;
var lowY:Number=booths[boothArr[0]].yValue;
var tarX:Number;
var tarY:Number;
var highX:Number=booths[boothArr[0]].xValue + booths[boothArr[0]]._width;
var highY:Number=booths[boothArr[0]].yValue + booths[boothArr[0]]._height;
var myPoint:Object={x:0,y:0};
var myPoint2:Object={x:0,y:0};
var centerWinX:Number;
var centerWinY:Number;
var tempX:Number;
var tempY:Number;
var boothX:Number;
var boothY:Number;
var boothOffsetX:Number;
var boothOffsetY:Number;
var moveX:Number;
var moveY:Number;
var zoomTo:Number;
for (var i=0; i < boothArr.length; i++) {
var booth:Number=boothArr[i];
var trans5:Transform=new Transform(booths[booth]);
var trans6:Transform=new Transform(miniBooths[booth]);
var myColor:ColorTransform=new ColorTransform(1,1,1,1,0,255,-255,50);
trans5.colorTransform=trans6.colorTransform=myColor;
booths[booth].boothLight=true;
trace("1 " + booths[0].xValue + " " + booths[0].yValue);
if (boothArr.length > 1) {
if (booths[booth].xValue < lowX) {
lowX=booths[booth].xValue;
}
if (booths[booth].yValue < lowY) {
lowY=booths[booth].yValue;
}
if (booths[booth].xValue + booths[booth]._width > highX) {
highX=booths[booth].xValue + booths[booth]._width;
}
if (booths[booth].yValue + booths[booth]._height > highY) {
highY=booths[booth].yValue + booths[booth]._height;
}
} else {
lowX=highX=booths[booth].xValue;
lowY=highY=booths[booth].yValue;
}
}
if (lowX == highX && lowY == highY) {
tempX=lowX;
tempY=lowY;
boothOffsetX=booths[booth]._width / 2;
boothOffsetY=booths[booth]._height / 2;
} else {
tempX=highX + lowX / 2;
tempY=highY + lowY / 2;
boothOffsetX=0;
boothOffsetY=0;
}
if (boothArr.length > 1) {
var zoomArea:Number;
var tempVar:Number;
if (highX - lowX > highY - lowY) {
zoomArea=highX - lowX;
zoomTo=_root.hitAreaMain._width * 70 / zoomArea;
} else {
zoomArea=highY - lowY;
zoomTo=_root.hitAreaMain._height * 70 / zoomArea;
}
} else {
zoomTo=_root.hitAreaMain._width * 10 / booths[boothArr[0]].zoomScale;
}
_root.hitAreaMain.localToGlobal(myPoint2);
centerWinX=myPoint2.x + _root.hitAreaMain._width / 2;
centerWinY=myPoint2.y + _root.hitAreaMain._height / 2;
trace("2 " + booths[0].xValue + " " + booths[0].yValue);
_root.scaleTo(zoomTo);
trace("3 " + booths[0].xValue + " " + booths[0].yValue);
//trace(zoomTo);
_root.tween_handler.onMotionFinished=function()
{
trace("4 "+ _global.booths[0].xValue+ " " + _global.booths[0].yValue);// This should read the array object
//trace(zoomTo);
_root.container.localToGlobal(myPoint);
boothX = ((((tempX+boothOffsetX)/100)*zoomTo)+myPoint.x);
boothY = ((((tempY+boothOffsetY)/100)*zoomTo)+myPoint.y);
moveX = (centerWinX - boothX);
moveY = (centerWinY - boothY);
trace("5 "+ _global.booths[0].xValue+ " "+_global.booths[0].yValue);
_root.checkBounds(moveX, moveY, 1, 0);
trace("6 "+ _global.booths[0].xValue+ " "+_global.booths[0].yValue);
_root.tween_handler.onMotionFinished = function()
{
trace("7 "+ _global.booths[0].xValue+ " "+_global.booths[0].yValue);
_root.container.localToGlobal(myPoint);
for(var j=0; j<_global.boothArr.length; j++)
{
//var b:Number = boothArr[j];
//trace("2 "+tAx[j]+ " " +tAy[j]);
//tarX = tAx[j]*(zoomTo/100)+myPoint.x;
//tarY = tAy[j]*(zoomTo/100)+myPoint.y;
//_root.placeTarget(tarX, tarY, j);
//_root.placeTarget((boothX+_root.actualMoveX-(boothOffsetX*(zoomTo/100))), (boothY+_root.actualMoveY-(boothOffsetY*(zoomTo/100))), i);
}
_root.numTargets = _global.boothArr.length;
}
};
}
-
I actually tried what you had suggested prior to posting my original post...however I failed to include one key piece of information...this function is within a custom class...so the _global command cannot be applied to an element in the class...
-
Ok, thanks for letting me know
What does this return:
PHP Code:
_root.tween_handler.onMotionFinished=function(booths)// Pass the variable throug function
{
trace(booths);// Trace this to see if it returns an object, if not then we have to look at the scope of the variable.
-
-
Ah yeah thats right, sorry long day. How and where are you declaring the booths variable in your class?
-
to counter the scope problem in the tween handler why not try to assign to a var on _root?
PHP Code:
for(var i=0; i<boothArr.length; i++) { _root.traceBooth = booths[0].xValue+ " "+booths[0].yValue; trace("1 "+ _root.traceBooth); //other code }
later: trace("4 "+ _root.traceBooth); etc.
gparis
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|