По первому пункту - в начальной версии у автора печатался какой-то текст (не помню уже что, но типа "нажмите клавишу А,B,C,D). Так и остался старт таймера. Замечание принимается.
По второму пункту - тоже принимается замечание. В моей редакции просто проверку на используемые клавиши надо перенести повыше и удалить повторяющий код. Результат должен быть таким:
Код AS3:
function on_keyDown(e:KeyboardEvent):void {
if (e.keyCode==49||e.keyCode==50||e.keyCode==51||e.keyCode==52) {
timer1.stop();
if (e.keyCode==49) {
delay=10;
dialogs.gotoAndStop(1);
} else if (e.keyCode == 50) {
delay=15;
dialogs.gotoAndStop(2);
} else if (e.keyCode == 51) {
delay=20;
dialogs.gotoAndStop(3);
} else if (e.keyCode == 52) {
delay=25;
dialogs.gotoAndStop(4);
}
answer_tf.text="";
myString=dialogs.tf.text;
myArray=myString.split("");
timer1.delay=delay;
timer1.start();
}
}
По-третьему пункту - автор хотел чтобы скорость таймера была разной в зависимости от нажатой клавиши (delay=20;//скорость печати). Просто в последних редакций кода на этом не заостряли внимание и delay была одинаковой. Поэтому был оставлен ранее используемый блок "if else if". В вашем случае к объекту keysMap надо добавить ещё одно свойство и устанавливать delay для каждой из назначенных клавиш.
В целом ваши замечания правильные и рациональны, но учитывая, что автор в АС3 плохо ещё разбирается, то логика работы "его замыслов" для него более понятна в данном изложении. Впрочем это ему судить и принимать решение.