Показать сообщение отдельно
Старый 02.01.2019, 12:50
RedHead90 вне форума Посмотреть профиль Отправить личное сообщение для RedHead90 Найти все сообщения от RedHead90
  № 2  
Ответить с цитированием
RedHead90

Регистрация: Apr 2018
Сообщений: 42
Что-то вы тут перемудрили.
1. Зачем таймер стартует сразу же, если при первом же срабатывании он останавливается?
2. Зачем таймер останавливается в начале слушателя on_keyDown? (попробуйте нажать любую не назначенную клавишу во время анимации печати)
3. Опять же, к чему эта копи-паста внутри if else if? К тому же в конце проверка кода клавиши дублируется. У вас на 4 кнопки одно действие, значит и проверка должна быть только одна.


Я бы сделал как-то так

Код AS3:
import flash.ui.Keyboard;
 
stop();
 
var keysMap:Object = {}; //код клавиши : номер кадра;
keysMap[Keyboard.NUMBER_1] = 1;
keysMap[Keyboard.NUMBER_2] = 2;
keysMap[Keyboard.NUMBER_3] = 3;
keysMap[Keyboard.NUMBER_4] = 4;
 
var timer1:Timer=new Timer(20);
timer1.addEventListener(TimerEvent.TIMER, frameLooper);
 
stage.addEventListener(KeyboardEvent.KEY_DOWN, on_keyDown);
 
var text:String = "";
var currentSymbol:int = 0;
var pattern:RegExp = new RegExp(String.fromCharCode(13), "g"); //регулярка, ищущая все возвраты каретки в строке
var repl:String = String.fromCharCode(10); //символ переноса \n
 
function frameLooper(event:TimerEvent):void {
    if (currentSymbol < text.length) {
        answer_tf.appendText(text.charAt(currentSymbol++));
    } else {
        timer1.stop();
    }
}
 
function on_keyDown(e:KeyboardEvent):void {
	if (keysMap.hasOwnProperty(e.keyCode)) {
		answer_tf.text="";
		dialogs.gotoAndStop(keysMap[e.keyCode]);
		text = dialogs.tf.text.replace(pattern, repl);
		currentSymbol = 0;
        timer1.start();
	}
}
А вообще это все баловство и ничего вменяемого с таким подходом не получиться.