- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
private function handleBtnEvent(evt:MouseEvent):void
{
switch(evt.currentTarget)
{
case exitBtn:
break;
case nextBtn:
handleNextRounder();
break;
case reportBtn:
handleReport();
break;
case hangUpBtn:
case stopBtn:
if(evt.currentTarget == stopBtn && _randomRoundStarted ||
evt.currentTarget == hangUpBtn)
handleHangUp();
else
handleLeaveRandomRound();
break;
}
enableMouseInteraction(false);
TweenLite.delayedCall(1,enableMouseInteraction,[true]);
}
Еще одно чудо народного зодчества от предыдущих ваятелей :)
gegMOPO4 25.01.2011 11:53 # 0
nibb13 25.01.2011 12:10 # 0
Для этих целей существует setTimeout.
wvxvw 25.01.2011 12:39 # −1
Более того, свитч в этом месте не то что не нужен, он вреден. Нужно было каждому событию добавить по слушателю (что в приниципе и было сделано), и убрать эту братскую могилу вообще.
gegMOPO4 25.01.2011 21:16 # 0
wvxvw 25.01.2011 21:46 # 0
Говнистость этого кода, в моем понимании в том, что используя switch в этой функции мы проверяем дважды одно и то же условие, что можно избежать используя if-else например.
wvxvw 25.01.2011 21:56 # 0
gegMOPO4 25.01.2011 23:23 # 0
По поводу свитча против отдельных слушателей -- тут тоже могут быть разные соображения. Включая то, что придётся дублировать последние две общие строчки, и вырастет размер байткода (не знаю, как на ActionScript, а на Java, где функциональность делается через классы -- существенно). Да и компактнее один свитч в одном месте.
wvxvw 26.01.2011 02:09 # −1
Свитч неудобочитаемый, особенно ввиду того, что, например, дают вам через пару дней лог ошибки с номерами строк, а вы в этом классе делали небольшую правку - поди разбери в каком из кейсов была ошибка. А если это функция - то хоть куда ее передвинь, все равно потом найдется.
Кроме того, повторно использовать кейс безо всей функции - ну никак :) А шансы того, что нужно будет во всех случаях какой-то общий фунционал примерно равны шансам, что в каждом случае нужен будет какой-то взаимоисключающий функционал (врезультате которого и появился, например, данный код).
bugmenot 26.01.2011 20:57 # +1
детектед.
gegMOPO4 27.01.2011 22:41 # 0
Если в ActionScript можно ссылаться без оверхеда прямо на конкретный метод -- тогда вопросов нет. Тем более, для каждого варианта (кроме stopBtn) уже предусмотрен отдельный метод.
wvxvw 27.01.2011 23:02 # −1
А что javac не заинлайнит таких слушателей, это ж очевидные кандидаты?