Исчезновение до точки исчезновения во Flash, программно (конечно) - PullRequest
0 голосов
/ 19 февраля 2009

Я пытаюсь сделать исчезающую вещь типа Звездных войн, такую ​​как это , но программно.

Большую часть того, что они сделали, легко запрограммировать (сделать анимацию движения), но я хочу также генерировать текстовую графику программно (например, из текста с использованием динамического текста obj).

Вопрос в том виде, в каком я его вижу (но я, конечно, открыт для других способов его увидеть) : есть ли способ получить наклонный прямоугольник от моего Динамический текстовый объект? Упомянутая здесь сетка scale9 здесь не будет этого делать, я совершенно уверен. Я хочу указать четыре очка, чтобы получить ромб (если так он называется).

Ответы [ 3 ]

2 голосов
/ 20 февраля 2009

Если вы компилируете для flash player 10 (для которого требуется CS4 или последняя версия Flex SDK), вы можете просто повернуть текстовое поле в 3d:

text.rotateX = -45;

Есть еще несколько проблем с этим, например, вам нужно использовать вложение шрифта и получить точку схождения в центре поля.

Выполнение этого во флэш-плеере <10 с растровыми изображениями также возможно, если вы мазохистичны и не возражаете против некоторого вертикального наложения. Идея состоит в том, чтобы использовать BitmapData.draw () для рисования каждой линии с обтравочным прямоугольником высотой 1 и преобразованием для деления перспективы. Например (в гибком): </p>

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 голос
/ 20 февраля 2009

Вы не можете сделать это простым способом во Flash Player 9 и более ранних версиях.
Flash Player 10 и Flash CS4 представляют некоторую базовую поддержку для 3D-преобразований, но они довольно просты, и я думаю, что эта «экстремальная» перспектива может оказаться сложной задачей. Однако я не использовал инструмент разработки CS4, так что там может быть проще.

Существуют также полноценные 3D-движки, такие как papervision и away3d , хотя они немного излишни.

Я думаю, что лучше всего использовать DisplacementMapFilter , у меня возникли проблемы с поиском хороших примеров этого онлайн, и я никогда не делал это сам, но я думаю, что пример в документах должно начаться хорошо.

Если вы чувствуете это, вы можете также просто нарисовать все пиксели в растровом изображении и располагать их один за другим, что может быть самым интересным для кода, но, вероятно, это будет довольно медленно и не так хорошо;)

1 голос
/ 19 февраля 2009

Вы можете рассмотреть преобразование текстового объекта в изображение, а затем сделать это для изображения.

-Adam

...