Эмуляция терминала в Flex - PullRequest
       13

Эмуляция терминала в Flex

3 голосов
/ 13 сентября 2008

Мне нужно сделать эмуляцию некоторых старых терминалов DOS или мэйнфреймов во Flex. Что-то вроде изображения ниже, например.

alt text

Различный цветной текст достаточно прост, но возможность использовать разные цвета фона, например желтый фон, выходит за рамки возможностей стандартного текста Flash.

Мне также может понадобиться вводить текст в определенных местах и ​​прокручивать текст вверх по «терминалу». Есть идеи, как я могу атаковать это? Или, что еще лучше, любой существующий код / ​​компоненты для такого рода вещей?

Ответы [ 2 ]

2 голосов
/ 13 сентября 2008

Используйте TextField.getCharBoundaries, чтобы получить прямоугольник из первых и последних символов в областях, где вы хотите фон. Из этих прямоугольников вы можете построить прямоугольник, который охватывает всю область. Используйте это, чтобы нарисовать фон в Shape, помещенном позади текстового поля, или в родительском элементе текстового поля.

Обновление Вы просили привести пример, вот как получить прямоугольник из диапазона символов:

var firstCharBounds : Rectangle = textField.getCharBoundaries(firstCharIndex);
var lastCharBounds  : Rectangle = textField.getCharBoundaries(lastCharIndex);

var rangeBounds : Rectangle = new Rectangle();

rangeBounds.topLeft = firstCharBounds.topLeft;
rangeBounds.bottomRight = lastCharBounds.bottomRight;

Если вы хотите найти прямоугольник для всей строки, вы можете сделать это вместо этого:

var charBounds : Rectangle = textField.getCharBoundaries(textField.getLineOffset(lineNumber));

var lineBounds : Rectangle = new Rectangle(0, charBounds.y, textField.width, firstCharBounds.height);

Если у вас есть границы текстового диапазона, для которого вы хотите нарисовать фон, вы можете сделать это в методе updateDisplayList родительского элемента текстового поля (при условии, что текстовое поле расположено в [0, 0] и имеет белый текст, а textRangesWithYellowBackground является массивом прямоугольников, представляющих текстовые диапазоны, которые должны иметь желтый фон):

graphics.clear();

// this draws the black background
graphics.beginFill(0x000000);
graphics.drawRect(0, 0, textField.width, textField.height);
graphics.endFill();

// this draws yellow text backgrounds
for each ( var r : Rectangle in textRangesWithYellowBackground )
    graphics.beginFill(0xFFFF00);
    graphics.drawRect(r.x, r.y, r.width, r.height);
    graphics.endFill();
}
1 голос
/ 13 сентября 2008

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

Цвет пикселя (или пикселей) в соответствии с фоном символа.

-Adam

...