0

我正在尝试做一个像这样消失的星球大战类型的事情,但是以编程方式。

他们所做的大部分工作都很容易编程(制作补间动画),但我也希望以编程方式生成基于文本的图形(例如,使用动态文本 obj 从文本生成)。

问题,正如我所看到的(但我当然愿意以其他方式看待它)是:有没有办法从我的动态文本对象中获得一个斜边矩形?这里提到的scale9grid不会这样做,我很确定。我想指定四个点来获得一个菱形(如果这就是它的名字)。

4

3 回答 3

2

如果您正在为 flash player 10 编译(需要 CS4 或最近的 flex sdk),您可以在 3d 中旋转文本字段:

text.rotateX = -45;

这还有一些问题,例如您需要使用字体嵌入,以及在字段中心获取消失点。

如果您是自虐狂,并且不介意一些垂直锯齿,那么在小于 10 的 Flash 播放器中使用位图执行此操作也是可能的。这个想法是使用 BitmapData.draw() 来绘制每条线,高度为 1 的剪切矩形和一个变换来进行透视分割。例如(弹性):

class Main extends Sprite
{
    [Embed(systemFont="Arial", fontName="embedFont", mimeType="application/x-font")]
    var embedFont:Class;

    public function Main()
    {
        var text:TextField = new TextField();
        text.defaultTextFormat = new TextFormat("embedFont", 30);
        text.embedFonts = true;
        text.autoSize = TextFieldAutoSize.LEFT;
        text.text = "Hello, world\nHow nice\nto have\nmultiple\nlines!";
        var bmp:BitmapData = new BitmapData(150, 100);

        for (var i:int = 0; i != bmp.height; ++i) {
            var m:Matrix = new Matrix();
            // x-division, change 0.8, 0.2 to change scale increase, scale at top
            m.a = i*(0.8/bmp.height)+0.2;
            // horizontal center
            m.tx = bmp.width * (1-m.a) / 2;
            // y-division, and align text to bottom
            m.ty = (bmp.height-i)/m.a - bmp.height; 
            bmp.draw(text, m, null, null, new Rectangle(0, i, bmp.width, 1));
        }

        addChild(new Bitmap(bmp));
    }
}

I haven't done the maths, so I don't know if that's physically accurate, but it should give you an idea.

于 2009-02-20T05:13:51.203 回答
1

您可能会考虑将文本对象转换为图像,然后对图像执行此操作。

-亚当

于 2009-02-19T18:13:24.527 回答
1

在 Flash Player 9 和更早的版本中,您无法以简单的方式真正做到这一点。
Flash player 10 和 Flash CS4 引入了对 3D 转换的一些基本支持,但这些都非常简单,我想这种“极端”视角可能很难正确处理。但是我没有使用 CS4 创作工具,所以在那里可能更容易。

还有像papervisionaway3d这样的完整 3D 引擎,尽管它们有点矫枉过正。

我认为最好的方法是使用DisplacementMapFilter,我很难在网上找到任何好的例子,而且我自己从来没有真正做过,但我认为文档中的例子应该让你开始就好了。

如果您愿意,您可以将所有像素绘制到位图并一个一个地处理它们,这可能是编码最有趣的事情,但它可能会很慢而且看起来不太好;)

于 2009-02-19T21:32:42.187 回答