Skip to main content
dalvydasv27776233
Inspiring
May 3, 2018
Answered

AS3 mc coordinates in rectangle.

  • May 3, 2018
  • 1 reply
  • 1298 views

I cant solve problem of coordinates.

I have this code:

import flash.events.Event;

var fl_DragBounds_2: Rectangle = new Rectangle(0, 50, 0, -100);

Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

mc.addEventListener(TouchEvent.TOUCH_BEGIN, fl_TouchBeginHandler_2);

mc.addEventListener(TouchEvent.TOUCH_END, fl_TouchEndHandler_2);

mc.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove);

function fl_TouchBeginHandler_2(event: TouchEvent): void {

     event.target.startTouchDrag(event.touchPointID, false, fl_DragBounds_2);

     trace("MC Position: " mc.y);

}

function onTouchMove(event:TouchEvent) {

}

function fl_TouchEndHandler_2(event: TouchEvent){

     event.target.stopTouchDrag(event.touchPointID);

     trace("MC Position: " mc.y);

}

But every time im geting:

MC Position: 0;

But its not true. I want to get real coordinates on y axis.

I can`t find solution.  I just find something how to get position child in parent. But its not working here.

Maby someone can help?

This topic has been closed for replies.
Correct answer dalvydasv27776233

import flash.utils.getTimer;

import flash.events.Event;

Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

var mc:apieinfo = new apieinfo;

    stage.addChild(mc);

   

var fl_DragBounds_2: Rectangle = new Rectangle(0, 50, 0, (mc.height*-1)+(stage.stageHeight-100));

var startTime:int;

var endTime:int;

var startY:Number;

var endY:Number;

var startX:Number;

var endX:Number;

mc.addEventListener(TouchEvent.TOUCH_BEGIN, fl_TouchBeginHandler);

mc.addEventListener(TouchEvent.TOUCH_END, fl_TouchEndHandler);

mc.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove);

mc.addEventListener(TouchEvent.TOUCH_ROLL_OUT,fl_TouchEndHandler);

function fl_TouchBeginHandler(event: TouchEvent): void {

    event.target.startTouchDrag(event.touchPointID, false, fl_DragBounds_2);

    startTime = getTimer();

    startY = event.stageY;

    startX = event.stageX;   

}

function onTouchMove(event:TouchEvent) {

}

function fl_TouchEndHandler(event: TouchEvent){

    event.target.stopTouchDrag(event.touchPointID);

    endTime = getTimer();

    endY = event.stageY;

    endX = event.stageX;

    bottomY = stage.stageHeight - event.target.height;

    setSpeed();       

    if(speed>0){

        stage.addEventListener(Event.ENTER_FRAME, movieUP);

    }   

    if(speed<0){

        stage.addEventListener(Event.ENTER_FRAME, movieDOWN);       

    }   

   

    if(event.target.y > 0){

        upSpeedRate = event.target.y*0.5;

        stage.addEventListener(Event.ENTER_FRAME, backToStart);

    }

    if(event.target.y < (stage.stageHeight-event.target.height)){

        downSpeedRate = ((event.target.y*-1)+bottomY)*0.5;

        stage.addEventListener(Event.ENTER_FRAME, backToEnd);

    }

}

var upSpeedRate:int;

var downSpeedRate:int;

var slowingRate:Number = 0.75;

var slowingRate2:Number = 0.5;

var bottomY:int;

var a:Number=0;

var b:Number=0;

function backToStart(e:Event):void{

    if(mc.y > 0){

        stage.removeEventListener(Event.ENTER_FRAME, movieDOWN);

        stage.removeEventListener(Event.ENTER_FRAME, movieUP);

        speed=0;

        mc.y -= upSpeedRate;

        upSpeedRate = upSpeedRate * slowingRate2;

    }

    if(upSpeedRate == 0){

        mc.y = 0;

        stage.removeEventListener(Event.ENTER_FRAME, backToStart);       

    }           

}

function backToEnd(e:Event):void{

    if(mc.y < (stage.stageHeight-mc.height)){

        stage.removeEventListener(Event.ENTER_FRAME, movieDOWN);

        stage.removeEventListener(Event.ENTER_FRAME, movieUP);

        speed=0;

        mc.y += downSpeedRate;

        downSpeedRate = downSpeedRate * slowingRate2;

    }

    if(downSpeedRate == 0){

        mc.y = (mc.height-800)*-1;

        stage.removeEventListener(Event.ENTER_FRAME, backToEnd);       

    }           

}

var speed:int;

var sumY:Number;

var distance:Number;

function setSpeed(){

    distance = startY-endY;

    speed = ((distance *1000) / (endTime-startTime))/24;

}

function movieUP(e:Event):void{

    mc.y -= speed;

    speed = speed * slowingRate;

    if(mc.y < (stage.stageHeight-mc.height)){

        upSpeedRate = mc.y*0.5;

        stage.addEventListener(Event.ENTER_FRAME, backToEnd);

        stage.removeEventListener(Event.ENTER_FRAME, movieUP);

    }

    if(speed == 0){

        stage.removeEventListener(Event.ENTER_FRAME, movieUP);

    }

}

function movieDOWN(e:Event):void{

    mc.y -= speed;

    speed = speed * slowingRate;

    if(mc.y > 0){

        upSpeedRate = mc.y*0.5;

        stage.addEventListener(Event.ENTER_FRAME, backToStart);

        stage.removeEventListener(Event.ENTER_FRAME, movieDOWN)

    }

    if(speed == 0){

        stage.removeEventListener(Event.ENTER_FRAME, movieDOWN)

    }       

}

works fine and I get normal coordinates when i added mc with addChild(mc)

Other problem is that if I do this:

mc.addEventListener(TouchEvent.TOUCH_BEGIN, fl_TouchBeginHandler);

mc.addEventListener(TouchEvent.TOUCH_END, fl_TouchEndHandler);

mc.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove);

mc.addEventListener(TouchEvent.TOUCH_ROLL_OUT,fl_TouchEndHandler);

In these TOUCH events I can use event.target.x, event.target.y and etc...

but if I call from these events to other functions in other functions I  have to use mc.height, mc.x, mc.y and etc.

But I dont want to write similar functions to every MovieClip with different name.

Maby somehow I can write name for example:

var circle_mc:round_circle = new round_circle;

stage.addChild(circle_mc);

var something:String = "circle_mc";

function changeX() {

     if (something.x > 0){

          something.x = 0;

     }

}

and use something.x; something.height in every other function. So i just need to change var something to some MovieClip name.


Oh I try this:

var circle_mc:round_circle = new round_circle;

var something:MovieClip = circle_mc;

stage.addChild(something);

function changeX() {

     if (something.x > 0){

          something.x = 0;

     }

}

AND IT WORKS FINE FOR ME:DD

Thanks FOR ALL ANSWERS;)

1 reply

Colin Holgate
Inspiring
May 3, 2018

Rectangle is x,y,width,height. This: Rectangle(0, 50, 0, -100); would be a zero width rectangle, that is -100 pixel in height.

dalvydasv27776233
Inspiring
May 3, 2018

I understand that.

But i have this

I need get coordinates of MC. But always im geting x=0;y=0;

://

kglad
Community Expert
May 4, 2018

unless that code is in the first keyframe that contains mc, there are many potential causes of that error.

ie, put that code in the first keyframe that contains mc and make sure mc is the instance name in the properties panel.

p.s

MC is not the same as mc.