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

Регистрация: Apr 2018
Сообщений: 42
@Жень Шень, то, что автор плохо разбирается как раз и стало причиной, почему я "докопался" до его кода. Лучше уж сразу указать на эти типичные ошибки, чтобы в будущем ему было проще обходить такие грабли стороной.

По поводу твоей правки могу сказать, что остановка таймера в начале условного блока с его последующим запуском в конце не имеет смысла. Будь задержка хоть 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'];