@Жень Шень, то, что автор плохо разбирается как раз и стало причиной, почему я "докопался" до его кода. Лучше уж сразу указать на эти типичные ошибки, чтобы в будущем ему было проще обходить такие грабли стороной.
По поводу твоей правки могу сказать, что остановка таймера в начале условного блока с его последующим запуском в конце не имеет смысла. Будь задержка хоть 1мс, слушатель таймера все равно не сработает, пока не выполнится текущий вызов. Даже если на это уйдет гораздо больше времени.
Ну и по поводу
Цитата:
Сообщение от Жень Шень
удалить повторяющий код.
|
То, что значения в каждом условном блоке подставляются разные не отменяет того, что код в каждом блоке повторяется. Если записать все это дело простым абстрактным языком, то получится что-то вроде

Код:
если (нажата нужная клавиша) {
изменить задержку;
перейти в соответствующий кадр.
} иначе если (нажата другая нужная клавиша) {
изменить задержку;
перейти в соответствующий кадр.
} иначе если (нажата другая нужная клавиша) {
изменить задержку;
перейти в соответствующий кадр.
} иначе если (нажата другая нужная клавиша) {
изменить задержку;
перейти в соответствующий кадр.
}
Повторение на лицо. А если вариантов будет не 4, а хотя бы 10? Тут каждый блок выполняет одну и туже функцию, а-ля

Код:
setDelayAndFrame(delay:Int, frame:Int):Void;
поэтому можно и нужно избавляться от всей этой кучи проверок.
Лучше уж, как ты и заметил, держать все это дело в keysMap

Код AS3:
keysMap[Keyboard.NUMBER_1] = {frame:1, delay:20};

Код AS3:
dialogs.gotoAndStop(keysMap[e.keyCode]['frame']);
timer1.delay = keysMap[e.keyCode]['delay'];