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

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

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

有帮助吗?

解决方案

如果您正在编译为Flash Player 10(要求CS4或最近的Flex SDK),你可以在三维旋转的文本字段:

text.rotateX = -45;

有几个问题,这一点,如你需要使用字体嵌入和获取消失点在该领域的中心。

这样做的flash播放器<10位图也可以,如果你是受虐狂,并且不介意一些垂直折叠。这个想法是使用的BitmapData.draw()来绘制每一行的高度1限幅RECT和变换做透视除法。例如(在柔性):

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));
    }
}

我没有做过的数学,所以我不知道这是物理精确,但它应该给你一个想法。

其他提示

您可以考虑文本对象转换为图像,然后这样做的形象。

- 亚当

在 Flash Player 9 及更早版本中,您实际上无法以简单的方式执行此操作。
Flash Player 10 和 Flash CS4 引入了对 3D 转换的一些基本支持,但这些支持非常简单,而且我想这种“极端”视角可能很难正确实现。不过,我没有使用过 CS4 创作工具,所以那里可能更容易。

还有完整的 3D 引擎,例如 纸视觉离开3d 虽然他们有点矫枉过正。

我认为最好的可能是使用 位移贴图过滤器, ,我在网上找到任何好的例子时遇到了一些困难,而且我自己从未真正做过,但我认为 文档中的示例 应该可以让你很好地开始。

如果你愿意的话 也只需将所有像素绘制到位图并一一查看它们,这可能是编码中最有趣的事情,但它可能会很慢并且看起来不太好;)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top