Два цвета в одном текстовом поле с использованием 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);
}
}
}
не имеет значения, где вы вводите новый текст