Skip to main content
November 23, 2010
Answered

Problem sending looped event.CurrentTarget to start position

  • November 23, 2010
  • 1 reply
  • 799 views

Hi there,

I've got a problem with an if/else statement within a function which checks to see which 'drop area' one of ten items should to snap to.. the problem is I can only set the start location of each item to work on the first hitTest, otherwise after clicking another item or positioning any item in one of the drop areas, the drop area becomes it's start location due to startDrag() and stopDrag() been called again to move the object..

What I've tried to do here is to create a variable (which does trace the correct (currentTargetHome) movieclip reference, but as a string) but it doesn't work when I try to access it's attributes using [currentTargetHome]. The item exists within the movieclip "gamePage" and the rest of the function works !

Any ideas would be appreciated Thanks in advance..

        function persoMouseUp(event:MouseEvent):void {

           

            var homeHitArray:Array = [gamePage.a1b, gamePage.a2b, gamePage.a3b, gamePage.a4b, gamePage.a5b];

           

            event.currentTarget.stopDrag();

            var currentTargetHome:String = "gamePage." + event.currentTarget.name + "b";

            //var currentHome:DisplayObject = getChildByName(currentTargetHome);

           

            gamePage.h2.visible = false;

            gamePage.h3.visible = false;

            gamePage.h4.visible = false;

           

            for(var i:Number = 0; i < homeHitArray.length; i++){

                    if(event.currentTarget.hitTestObject(homeHitArray)) {

                        event.currentTarget.x = (homeHitArray).x;

                        event.currentTarget.y = (homeHitArray).y;

                    } else if(event.currentTarget.hitTestObject(gamePage.h2)) {

                        event.currentTarget.x = gamePage.h2.x;

                        event.currentTarget.y = gamePage.h2.y;

                    } else if(event.currentTarget.hitTestObject(gamePage.h3)) {

                        event.currentTarget.x = gamePage.h3.x;

                        event.currentTarget.y = gamePage.h3.y;

                    } else if(event.currentTarget.hitTestObject(gamePage.h4)) {

                        event.currentTarget.x = gamePage.h4.x;

                        event.currentTarget.y = gamePage.h4.y;

                    } else {

                        event.currentTarget.x = [currentTargetHome].x;

                        event.currentTarget.y = [currentTargetHome].y;

                        //trace(currentTargetHome);

                    }

            }

     }

This topic has been closed for replies.
Correct answer Ned Murphy

I cannot say I follow the description of the problem, and can't refer back to it here since the clean posting of the code is what I'm looking at now, but in your code I see you using...

 

     var currentTargetHome:String = "gamePage." + event.currentTarget.name + "b";

That will not work if the intention is to target an object that lives inside gamePage.  Building the "." into the string does not work when applying the bracket notation.  You need to have each object separated, as in... this["gamePage"][event.currentTarget.name + "b"].  So you instead could use something like...

     var currentTargetHome:String = event.currentTarget.name + "b";

and then later use...

     event.currentTarget.x = gamePage[currentTargetHome].x;

Now that will align the event.currentTarget to the currrentTargetHome if the event.currentTarget is also inside gamePage.

1 reply

November 23, 2010

        function persoMouseUp(event:MouseEvent):void {
            
             var homeHitArray:Array = [gamePage.a1b, gamePage.a2b, gamePage.a3b, gamePage.a4b, gamePage.a5b];
            
             event.currentTarget.stopDrag();
             var currentTargetHome:String = "gamePage." + event.currentTarget.name + "b";
             //var currentHome:DisplayObject = getChildByName(currentTargetHome);
            
             gamePage.h2.visible = false;
             gamePage.h3.visible = false;
             gamePage.h4.visible = false;
            
             for(var i:Number = 0; i < homeHitArray.length; i++){
                     if(event.currentTarget.hitTestObject(homeHitArray)) {
                         event.currentTarget.x = (homeHitArray).x;
                         event.currentTarget.y = (homeHitArray).y;
                     } else if(event.currentTarget.hitTestObject(gamePage.h2)) {
                         event.currentTarget.x = gamePage.h2.x;
                         event.currentTarget.y = gamePage.h2.y;
                     } else if(event.currentTarget.hitTestObject(gamePage.h3)) {
                         event.currentTarget.x = gamePage.h3.x;
                         event.currentTarget.y = gamePage.h3.y;
                     } else if(event.currentTarget.hitTestObject(gamePage.h4)) {
                         event.currentTarget.x = gamePage.h4.x;
                         event.currentTarget.y = gamePage.h4.y;
                     } else {
                         event.currentTarget.x = [currentTargetHome].x;
                         event.currentTarget.y = [currentTargetHome].y;
                         //trace(currentTargetHome);
                     }
             }
      }

Ned Murphy
Ned MurphyCorrect answer
Legend
November 23, 2010

I cannot say I follow the description of the problem, and can't refer back to it here since the clean posting of the code is what I'm looking at now, but in your code I see you using...

 

     var currentTargetHome:String = "gamePage." + event.currentTarget.name + "b";

That will not work if the intention is to target an object that lives inside gamePage.  Building the "." into the string does not work when applying the bracket notation.  You need to have each object separated, as in... this["gamePage"][event.currentTarget.name + "b"].  So you instead could use something like...

     var currentTargetHome:String = event.currentTarget.name + "b";

and then later use...

     event.currentTarget.x = gamePage[currentTargetHome].x;

Now that will align the event.currentTarget to the currrentTargetHome if the event.currentTarget is also inside gamePage.

November 23, 2010

First off, thank you Ned for your help This works flawlessly!

I did have to fiddle about a little with the code just because even though I was dropping over the target areas, the item would return to currentTargetHome.. this was down to the for loop I'd added to try to force the items to return to their base point, but once that was removed it worked great..

Here is the updated code in case it can help anyone else :-

function persoMouseUp(event:MouseEvent):void {

     event.currentTarget.stopDrag();

     var currentTargetHome:String = event.currentTarget.name + "b";

     gamePage.h2.visible = false;

     gamePage.h3.visible = false;

     gamePage.h4.visible = false;

     if(event.currentTarget.hitTestObject(gamePage.h2)) {

          event.currentTarget.x = gamePage.h2.x;

          event.currentTarget.y = gamePage.h2.y;

     } else if(event.currentTarget.hitTestObject(gamePage.h3)) {

          event.currentTarget.x = gamePage.h3.x;

          event.currentTarget.y = gamePage.h3.y;

     } else if(event.currentTarget.hitTestObject(gamePage.h4)) {

          event.currentTarget.x = gamePage.h4.x;

          event.currentTarget.y = gamePage.h4.y;

     } else {

          event.currentTarget.x = gamePage[currentTargetHome].x;

          event.currentTarget.y = gamePage[currentTargetHome].y;

          }

}