1

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

请问我该怎么做?

谢谢你。

4

2 回答 2

1

啊,老注册点问题。:)

我曾经看到一个小的自定义类,它允许您更改显示对象的注册点,就像您可以在 Flash 创作中简单地做的那样。如果您好奇,请在 Google 周围搜索。

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

//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();
于 2010-10-13T16:22:07.507 回答
1

我对旧注册点问题的建议,几件事......

  • 如果您可以编辑符号并且您只需要处理几个,老实说 - 手动进行。
  • 如果您有很多需要处理但仍然可以雇用猴子来重新定位符号,请考虑查看 JSFL 脚本来批处理您选择的库符号。
  • 如果您必须使用 AS3 动态重新定位它...

    • 而且您不介意将对象放入另一个容器中,将其放入新的 Sprite 对象中,使其底部中心与 (0,0) 位置相交,然后您可以缩放 sprite 容器而不是资产。
    • 而且您不介意为资产的 BitmapData 快照牺牲矢量质量,拍摄资产快照(因为它看起来“完全打开/拉伸”),裁剪位图(通过使用以下组合:

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

    ...一旦你有一个可靠的左上角注册点,你可以做数学把这个位图定位在一个 Sprite 容器中(如上)以向上缩放它。

或者......雇用猴子也会很有趣:P

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

于 2010-10-14T15:48:30.777 回答