AS3将MovieClip的注册点更改为宽度和底部的中心

时间:2010-10-13 09:56:15

标签: flash actionscript-3 registration point

我在AS3动画中有一个MC,我想从下到上增加它的高度,这意味着注册点应该是MC的底部和宽度的中心(水平中心)。

我该怎么办呢?

谢谢。

2 个答案:

答案 0 :(得分:1)

啊,老注册点问题。 :)

我曾经看过一个小的自定义类,允许您更改显示对象的注册点,就像在Flash创作中一样。如果你好奇的话,请四处寻找。

但是,解决方案相当容易。根据对象如何添加到显示列表来分配显示对象的注册点。您只需要将显示对象添加到显示列表时考虑到这一点,然后设置一些简单的数学来更改注册点:

//Set up rect's width and height
var rectWidth:uint = 200;
var rectHeight:uint = 100;

//Assign registration point (TL, TC, TR, CL, C, CR, BL, BC, BR = top, center, bottom, left, right)
var registration:String = "C"

//Assign rect's X and Y properties
var rectX:int;
var rectY:int;

switch (registration)
       {
       case "TL": rectX = 0;
                  rectY = 0;
                  break;

       case "TC": rectX = -rectWidth / 2;
                  rectY = 0;
                  break;

       case "TR": rectX = -rectWidth;
                  rectY = 0;
                  break;

       case "CL": rectX = 0;
                  rectY = -rectHeight / 2;
                  break;

       case "C":  rectX = -rectWidth / 2;
                  rectY = -rectHeight / 2;
                  break;

       case "CR": rectX = -rectWidth;
                  rectY = -rectHeight / 2;
                  break;

       case "BL": rectX = 0;
                  rectY = -rectHeight;
                  break;

       case "BC": rectX = -rectWidth / 2;
                  rectY = -rectHeight;
                  break;

       case "BR": rectX = -rectWidth;
                  rectY = -rectHeight;
       }


//Draw the rect
var rect:Sprite = new Sprite();
rect.graphics.beginFill(0xFF0000);
rect.graphics.drawRect(rectX, rectY, rectWidth, rectHeight);
rect.graphics.endFill();

答案 1 :(得分:1)

我对旧注册点问题的建议很少......

  • 如果您可以编辑该符号,并且您只需要处理一些符号,请诚实地 - 手动执行。
  • 如果你有很多人可以处理,但仍然可以雇用猴子 重新定位符号,考虑一下 调查JSFL脚本批处理 处理您选择的图书馆 符号。
  • 如果你必须使用AS3动态重新定位它......

    • 你不介意把对象放到另一个容器里,把它放进去 到一个新的Sprite对象 位于底部中心的位置 遇到(0,0)位置,然后你 可以缩放精灵容器 而不是你的资产。
    • 你不介意牺牲BitmapData的矢量质量 你的资产的快照,拿一个 资产的快照(就像它一样 出现“完全打开/拉伸”, 裁剪位图(使用a 组合:

    var rect:Rectangle = bitmapData.getColorBoundsRect(0xff000000,0,false);    yourCroppedBitmapData.copyPixels(bitmapData,rect,...);

    ......一旦你有一个可靠的左上角走投无路 注册点,你可以做到 数学把这个位图放在一个 Sprite容器(如上所述)进行缩放 它向上。

或者......招聘猴子也很有趣:P

但是,这些是你可以重新定位符号的一些替代方法。