A Flash Developer Resource Site

Results 1 to 7 of 7

Thread: Why am I losing my array?

  1. #1
    Senior Member
    Join Date
    Nov 2007
    Posts
    207

    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?

  2. #2
    AS3 Mod
    Join Date
    Sep 2007
    Location
    O-H-I-O
    Posts
    2,385
    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=0boothArr.lengthi++) {
            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._root.hitAreaMain._width 2;
        
    centerWinY=myPoint2._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(moveXmoveY10);
            
            
    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=0j<_global.boothArr.lengthj++)
            {
            
    //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;
            }
        };


  3. #3
    Senior Member
    Join Date
    Nov 2007
    Posts
    207
    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...

  4. #4
    AS3 Mod
    Join Date
    Sep 2007
    Location
    O-H-I-O
    Posts
    2,385
    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. 

  5. #5
    Senior Member
    Join Date
    Nov 2007
    Posts
    207
    odd output...

    [Tween]

  6. #6
    AS3 Mod
    Join Date
    Sep 2007
    Location
    O-H-I-O
    Posts
    2,385
    Ah yeah thats right, sorry long day. How and where are you declaring the booths variable in your class?

  7. #7
    Senior Member
    Join Date
    Aug 2000
    Location
    Montréal
    Posts
    14,141
    to counter the scope problem in the tween handler why not try to assign to a var on _root?
    PHP Code:
    for(var i=0i<boothArr.lengthi++) {
    _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
  •  




Click Here to Expand Forum to Full Width

HTML5 Development Center