以编程方式淡入Flash中的消失点(当然)

时间:2009-02-19 18:11:05

标签: flash transformation scale9grid

我正试图像this这样消失的星球大战类型的东西,但是以编程方式。

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

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

3 个答案:

答案 0 :(得分:2)

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

text.rotateX = -45;

还有一些问题,例如你需要使用字体嵌入,并将消失点放在字段的中心。

在Flash播放器中执行此操作<如果你是受虐狂的话,10也可以使用位图,并且不介意一些垂直别名。我们的想法是使用BitmapData.draw()绘制每个高度为1的剪切矩形线和一个用于进行透视分割的变换。例如(在flex中):

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

我没有完成数学计算,所以我不知道这是否准确,但它应该给你一个想法。

答案 1 :(得分:1)

您可以考虑将文本对象转换为图像,然后将其转换为图像。

- 亚当

答案 2 :(得分:1)

在Flash Player 9及更早版本中,您无法以简单的方式执行此操作 Flash播放器10和Flash CS4为3D转换引入了一些基本支持,但这些非常简单,我认为这种“极端”的观点可能很难实现。但是我没有使用CS4创作工具,所以在那里可能会更容易。

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

我认为最好的是使用DisplacementMapFilter,我在网上找到任何好的例子都有些困难,我自己从未真正做过,但我认为example in the docs应该让你开始很好。

如果你觉得它,你可以也只是将所有像素绘制到一个位图并逐个拥有它们,这可能是最有趣的代码,但很可能是很慢,看起来不太好;)