| MovieClip._x Property | Flash 4 |
| horizontal location of a clip or movie, in pixels | read/write |
The floating-point _x property always indicates the horizontal position of mc's registration point, but it is measured relative to one of three possible coordinate spaces:
If mc resides on the main timeline, _x is measured relative to the Stage's left edge. For example, an _x of 20 indicates that the registration point of mc is 20 pixels to the right of the Stage's left edge; -20 indicates 20 pixels to the left.
If mc resides on another movie clip instance's timeline, _x is measured relative to the registration point of that parent instance. For example, an _x of 20 indicates that the registration point of mc is 20 pixels to the right of its parent instance's registration point; -20 indicates 20 pixels to the left.
If mc is the main movie, _x is the horizontal offset of the entire .swf document, relative to the Stage's left edge. For example, an _x of 200 indicates that the contents of the Stage are offset 200 pixels to the right of their author-time position; -200 indicates 200 pixels to the left.
The _x property (along with all horizontal coordinates in Flash) increases to the right and decreases to the left. Fractional _x values are approximated in Flash with antialiasing (blurring). Flash's basic unit of measure is a twentieth of a pixel (a "twip"), so the shortest distance a clip can be moved horizontally is .05 pixels. Smaller increments are ignored:
trace(ball_mc._x); // Displays: 0 ball_mc._x += .01; trace(ball_mc._x); // Still displays 0. The assignment had no effect.
If mc is contained by an instance that is scaled and/or rotated, the coordinate space it inhabits is also scaled and/or rotated. For example, if mc's parent is scaled by 200% and rotated 90 degrees clockwise, _x will increase in the downward direction rather than to the right, and a single unit of _x will actually be 2 pixels instead of 1.
Because switching between instance and main movie coordinate spaces can be cumbersome, the MovieClip object provides the localToGlobal( ) and globalToLocal( ) methods for performing coordinate-space transformations.
The following onEnterFrame( ) handler causes ball_mc to move 5 pixels to the right with each passing frame (assuming that its coordinate space hasn't been altered by transformations to its parent):
ball_mc.onEnterFrame = function () {
this._x += 5;
}
Positioning clips via _x and _y is a fundamental task in visual ActionScript programming. The following example adds to all movie clips a follow( ) method that moves a clip towards a point at a fixed rate specified by the custom speed property (many other motion samples can be obtained from the online Code Depot):
// Method: MovieClip.follow()
// Moves a clip toward the point (leaderX, leaderY)
MovieClip.prototype.follow = function (leaderX, leaderY) {
// Move only if we're not at the destination
if (this._x != leaderX || this._y != leaderY) {
// Determine the distance between the clip and leader
var deltaX = this._x - leaderX;
var deltaY = this._y - leaderY;
var dist = Math.sqrt((deltaX * deltaX) + (deltaY * deltaY));
// Allocate speed between X and Y axes
var moveX = this.speed * (deltaX / dist);
var moveY = this.speed * (deltaY / dist);
// If the clip has enough speed to overshoot the destination, just go
// to the destination. Otherwise move according to the clip's speed.
if (this.speed >= dist) {
this._x = leaderX;
this._y = leaderY;
} else {
this._x -= moveX;
this._y -= moveY;
}
}
}
// Usage...
butterfly_mc.speed = 10;
butterfly_mc.onEnterFrame = function () {
this.follow(_root._xmouse, _root._ymouse);
}
MovieClip.globalToLocal( ), MovieClip.localToGlobal( ), MovieClip._xscale, MovieClip._y