Copy link to clipboard
Copied
I'm coding an app where you draw shapes with the mouse. When the shape is complete it gets assigned the name "Room"+RoomNum. It then gets nested inside a MovieClip named MainStage. This all works fine but whenever a shape is added to MainStage the x,y coordinates of that shape are always 0,0 no matter where the shape is drawn. How do I get the actual coordinates relative to where it is on the MainStage MC?
My goal is to get those coorinates and place text in the centre of the shape.
Copy link to clipboard
Copied
check the mouse x,y when the shape is being created.
Copy link to clipboard
Copied
Hi.
Are the shapes created only defined by drawing commands inside of MainStage or each shape gets it own container?
Also, is it AS3 or HTML5 Canvas?
Regards,
JC
Copy link to clipboard
Copied
Hi, the shapes have their own container inside of MainStage.
Copy link to clipboard
Copied
Alright.
What's the code you're using to add the shapes to MainStage when the user finishes drawing?
Copy link to clipboard
Copied
I'm still getting to grips with coding in a conventional way so the following code is not stremlined.
This code is run after the shape is drawn. The shape and points are deleted and redrawn into a MovieClip, then added to MainStage.
var TotalPoints = a;
MovieClip(root)["Room" + Room] = new MovieClip();
MovieClip(root)["Room" + Room].name = "Room" + Room;
MainStage.addChild(MovieClip(root)["Room" + Room]);
MovieClip(root)["Room" + Room].graphics.lineStyle(2, 0x000000, 1, true, LineScaleMode.NORMAL);
MovieClip(root)["Room" + Room].graphics.moveTo(MovieClip(root)["PointMC" + 1].x, MovieClip(root)["PointMC" + 1].y);
MovieClip(root)["Room" + Room].graphics.beginFill(0x66FF00, 0.2);
//Loop through Points and Lines
for (var i: uint = 1; i <= a; i++) {
var j = i + 1;
//Delete Points and Lines
MovieClip(root)["SolidLine" + i].graphics.clear();
//Redraw Room and add Points and Lines to MovieClip
if (i < TotalPoints) {
MovieClip(root)["Room" + Room].graphics.lineTo(MovieClip(root)["PointMC" + j].x, MovieClip(root)["PointMC" + j].y);
} else {
MovieClip(root)["Room" + Room].graphics.lineTo(MovieClip(root)["PointMC" + 1].x, MovieClip(root)["PointMC" + 1].y); //Close Path
}
}
MovieClip(root)["Room" + Room].graphics.endFill();
Copy link to clipboard
Copied
and is the container position what you want?
Copy link to clipboard
Copied
I'm after the x,y position of where the shape sits inside MainStage. I tried your earlier suggestion by checking the mouse x,y when drawn. I did this by getting the top left cordinates of the shape after drawn inside MainStage but before the shape was added to a Movieclip and re-added to Mainstage. It works but I thought there must be an easier way.
var SortX: Array;
var SortY: Array;
SortX = new Array;
SortY = new Array;
var d = 0;
for (var b: int = 0; b < TotalPoints; b++) {
d++;
SortX[b] = MovieClip(root)["PointMC" + d].x;
SortY[b] = MovieClip(root)["PointMC" + d].y;
}
SortX.sort(Array.NUMERIC);
SortY.sort(Array.NUMERIC);
ShapeRegX = SortX[0];
ShapeRegY = SortY[0];
Copy link to clipboard
Copied
is the container's position what you want?
Copy link to clipboard
Copied
Yes, correct.
Copy link to clipboard
Copied
then use its x,y
Copy link to clipboard
Copied
The shapes x,y is always 0,0 when added to the MainStage MovieClip, no matter where on the MainStage its added. I'm after the actual position of where it sits inside MainStage. Apologies if I'm not being clear.
Copy link to clipboard
Copied
what is the x,y of container for example?
Copy link to clipboard
Copied
Thanks for the code.
What's happening is that moveTo and lineTo are creating the shapes in the cursor coordinates, but the parent of each shape remains at 0,0.
What I think you should be doing is to add each cointainer at the cursor position and then start using moveTo and lineTo from there.