如何使对象位置从左下角开始



所以我很难弄清楚这一点。我想在舞台的右下角进行舞台和舞台。

        box.x = 100
        box.y = 100
        this.addChild(box);

从舞台的左下角是100px。

我尝试了

        stage.scaleMode = StageScaleMode.NO_SCALE;
        stage.align = StageAlign.BOTTOM_LEFT;

,但它不起作用。我想念什么吗?

您对"制作MoviecClip并在左下方进行注册点?并在此电影剪辑中添加内容"的评论无疑是一种方法。可能是最简单的第一种方法,它可以让您轻松按需移动并具有任何包含的对象更新。

另一种方法是创建一个点对象并引用该点以定位所有内容。类似:

var origin:Point = new Point(0, this.stage.stageHeight);

,然后是您的盒子:

box.x = origin.x + 100;
box.y = origin.y - 100;

但是,如果要更改此信息,则必须添加一些代码并更新现有对象的所有位置。


如果您真的坚持这一点 y向上并且-y在舞台上向下走,则可以使用一个技巧,但是可能会有巨大的高架头脑成本:

使用第一种方法,但在放在左下角的位置之前,请给MovieClip进行负100 y的缩放,尽管现在一切都会颠倒,因此您必须处理/因素,因此不建议使用。但是只是把它扔到那里。

您还可以创建一个静态方法并在需要时始终调用它,例如:

public class DisplayObjectUtils
{
    public static function setRegPoint(obj:DisplayObjectContainer, newX:Number, newY:Number):void
    {
        var bounds:Rectangle = obj.getBounds(obj.parent);
        var currentRegX:Number = obj.x - bounds.left;
        var currentRegY:Number = obj.y - bounds.top;
        var xOffset:Number = newX - currentRegX;
        var yOffset:Number = newY - currentRegY;
        obj.x += xOffset;
        obj.y += yOffset;
        var totalChildren:uint = obj.numChildren;
        for (var i:int = 0; i < totalChildren; i++)
        {
            obj.getChildAt(i).x -= xOffset;
            obj.getChildAt(i).y -= yOffset;
        }
        bounds = null;
    }
}

要使用,请尝试以下操作:

//register point in the center of the object //box.width >> 1, box.height >> 1
DisplayObjectUtils.setRegPoint(box, box.width >> 1, box.height >> 1);

最新更新