Два цвета в одном текстовом поле с использованием Actionscript 2

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

Например, если я хочу ввести строку "его прощение", я хочу, чтобы "h" было красным, "i" - оранжевым, "s" - желтым, "f" - красным, "o" - быть оранжевым, "r" - желтым, "g" - зеленым, "i" - синим, "v" - индиго, "e" - фиолетовым. Оставшаяся "Несс" может быть фиолетовой, мне все равно. Мне просто нужна оригинальная концепция. Пока что я могу изменить только цвет всей текстовой области при нажатии клавиш, а не один символ строки.

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

(1/4) Вставьте следующий код на сцену.

counter = -1;
var key:Object = {onKeyDown:function () {
counter = counter+1;
if (counter == 1) {
    inp.textColor = 0xFF0000;
}
if (counter == 2) {
    inp.textColor = 0xFF9900;
}
if (counter == 3) {
    inp.textColor = 0xFFFF00;
}
}};
Key.addListener(key);

(2/4) Создайте поле ввода с именем экземпляра "inp"

(3/4) Проверьте фильм.

(4/4) Выберите текстовое поле и начните вводить его.

У меня есть только изменение всего текстового поля с вашего цвета по умолчанию на красный, а затем оранжевый, а не желтый. Получение настоящего радужного кода будет тем, чего я так долго ждал, если вы можете помочь.

1 ответ

Чтобы реализовать разные цвета в одном текстовом поле, вы должны использовать эти свойства в вашем текстовом поле:

myTextField.html = true
myTextField.htmlText = 'bli bli bli<font color="#0000FF">bla bla bla/font>'

или вы можете использовать класс TextFormat для этого.

Вот как вы можете сделать.

tField.text = "bli bli bli";
var tFormat:TextFormat = new TextFormat();
tFormat.color = 0xff0000;
tField.setTextFormat(0,5,tFormat);

tFormat.color = 0x33cc33;
tField.setTextFormat(5,9,tFormat);

и чтобы получить цвета при вводе, используйте этот класс:

package  {

import flash.text.TextField;
import flash.text.TextFieldType;
import flash.text.TextFormat;
import flash.events.KeyboardEvent;
import flash.events.Event;

public class ColorTextField extends TextField{

    var tf:TextFormat = new TextFormat();
    var ar:Array = new Array(0xFF0000,0x00FF00,0x0000FF,0x123456);

    public function ColorTextField() {
        // constructor code
        this.type = TextFieldType.INPUT;

        tf.size = 33;
        this.defaultTextFormat = tf;


        this.addEventListener(KeyboardEvent.KEY_UP,onKeyUp);
    }


    private function onKeyUp(event:KeyboardEvent):void{

        var index:int = 0;
        var colorIndex:int = 0;

        while (index < this.text.length){

            var char:String = this.text.substr(index,1);
            if(char == " "){
                colorIndex = 0;
            }else{
                tf.color = ar[colorIndex];
                trace(index + "-" +ar[colorIndex]);
                this.setTextFormat(tf,index,index+1);

                colorIndex++;

                if(colorIndex > ar.length-1){
                    colorIndex = ar.length-1;
                }
            }

            index++;
        }
    }

}

}

Вот как вы это реализуете. Создайте новый AS3 Fla и назначьте его в качестве базового класса:

package  {

import flash.display.MovieClip;
import flash.text.TextField;
import flash.text.TextFieldType;


public class MyClass extends MovieClip {

    var tf:ColorTextField = new ColorTextField();

    public function MyClass() {
        // constructor code
        tf.width = 500;
        tf.text = "12345";

        this.addChild(tf);
    }
}

}

не имеет значения, где вы вводите новый текст

Другие вопросы по тегам