1. ActionScript / Говнокод #14144

    −130

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    [Embed(source="../../assets/dtmf/dtmf-0.mp3")]
    [Bindable]
    public var dtmf0 : Class;
    
    // ...еще десяток звуков ...
    
    [Embed(source="../../assets/dtmf/dtmf-star.mp3")]
    [Bindable]
    public var dtmfstar : Class;
    
    private function clickHandler(key : String) : void {
        var dtmf : Object = {
            "0": dtmf0, "1": dtmf1, "2": dtmf2,
            "3": dtmf3, "4": dtmf4, "5": dtmf5,
            "6": dtmf6, "7": dtmf7, "8": dtmf8,
            "9": dtmf9, "*": dtmfstar, "#": dtmfhash
        };
        var sound : Sound = new dtmf[key]() as Sound;
        sound.play();
        dispatchEvent(new DataEvent('dialpadKey', false, false, key));
    }

    Как говорится, от пыхи и от флеша не зарекаются... Вот и мне пришлось на пару-тройку дней связаться с флешем флексом.

    Вот такой вот код я высрал написал сегодня ;)

    Запостил: bormand, 27 Ноября 2013

    Комментарии (18) RSS

    • Вчерашний вечер, судя по коду, был веселым ))
      Ответить
    • больше технологий, хороших и разных!
      Ответить
    • Ну, если работа затянется (или флеш использовался только изза встроенного МП3 плеера, чтобы с лицензией не париться?)
      Ресурсы так лучше не встраивать, а вместо этого:
      [Embed(...)]
      public class SomeSound extends Sound { ... }

      потому что это избегает зависимости от педереастической frameworks.swc в которой находятся *Asset классы (которые никому не нужны, но их до сих пор не выпилили из компилятора).

      [Bindable] - лучше всего не использовать, как долгосрочное решение. Если что-то по-быстрому сделать, то ок, но в будущем это создает массу проблем с отладкой, наследованием, интроспекцией и т.д.

      Соответственно, исходя из того, как встроены ресурсы, можно было бы избежать и создания dtmf переменной. Если брать мой пример выше, то создание нового звука было бы: new getDefinitionByName("SomeSound")(); На сколько я знаю, большинство редакторов на сегодняшний день предоставляют какую-нибудь автоматизацию встраивания ресурсов. Я в молодости даже плагин для этого написал: http://www.flasher.ru/forum/blog.php?b=187 FDT вроде как есть из коробки что-то, FlashDevelop - там сейчас по-моему есть тоже из коробки какой-то генератор (но он мне не нравился, когда последний раз пользовался).

      Но советовал бы использовать: http://code.google.com/p/hxswfml/ - тут больше возможностей (но нет графического интерфейса).

      ПС. Да, на сколько я знаю, dialpadKey не является встроенным DataEvent - в чем соль?
      Ответить
      • > флеш использовался только изза встроенного МП3 плеера, чтобы с лицензией не париться?
        Не, не только. Там еще RTMP и speex, ради которых все это дело и затевалось :)

        > public class SomeSound extends Sound { ... }
        > new getDefinitionByName("SomeSound")()
        Спасибо, возьму на заметку.

        > getDefinitionByName()
        Возвращает класс по его имени?

        > Если что-то по-быстрому сделать, то ок
        Ну а так оно и есть, очень маловероятно, что этот проект сильно разрастется. В принципе, если не считать доводки дизайна, клиентскую часть я уже закончил. И из примера с интерфейсом в стиле "ёбаный пиздец, куда тут вообще тыкать?" оно превратилось в нечто вполне вменяемое и юзабельное ;)

        > отладкой
        Я дебажу по-старинке, через trace :))

        > dialpadKey не является встроенным DataEvent - в чем соль?
        Он выше в xml'ке объявлен ;) А в чем соль - я х.з. В примере так было... Я же на экшенскрипте пишу в лучших традициях индусов - пример/стековерфловочка/копипаста. Серьезно подходить к его изучению пока лениво, да и некогда...
        Ответить
      • > FlashDevelop
        Хех, да у меня вообще спартанские условия: flex sdk, да сборочный скриптик. Ну и дебажный flash player, чтобы трейсы читать.
        Ответить
        • Я сейчас примерно так же работаю :( Попросили сделать тестовое задание, вместо собеседования. Но в Линуксе теперь можно только компилятор собрать. Отладчик тоже собрать можно, но отладочного плеера нет. Мой отладчик: выводить в ж.скрипт консоль...

          Но если условия позволяют (не нужна современная версия плеера), то можно и отладчик запустить. ФлешДевелоп можно худо-бедно запустить из вайна, но интерфейс очень бажный, так что комфортной работы не будет. Есть такой проект: http://code.google.com/p/fb4linux/ ктото сделал доброе дело и таки доделал за адобовцев их работу. Я пользовался одно время, и, вполне терпимо было.

          Писал для эмакса минимальный интерфейс к отладчику и проверку ошибок, но так давно ничего с этим не делал, что наверное оно уже не рабочее / я даже не помню, где оно находится.

          getDefinitionByName - возвращает сущность (может быть класс, может быть функция, переменная, пространство имен, интерфейс).

          Обычная практика объявлять типы событий вместе с классом события, т.е. например:
          public class SomeEvent extends Event {
          public static constant FOO:String = "foo";
          ...

          и использовать тогда уже как:
          new SomeEvent(SomeEvent.FOO);

          DataEvent - встроенное событие, и добавить в него новых констант - никак (и вообще тут оно как-то не в тему, это событие диспатчат всякие классы связаные с сетью, типа сокетов, стримов и т.п. Звук, может его диспатчить, если например, его загружают, и поток, который читает звуковые данные получил новую партию данных).
          Ответить
          • > Обычная практика объявлять типы событий вместе с классом события
            Спасибо, переделаю ;)

            > Звук, может его диспатчить
            Ну тут его не звук диспатчит... Этот ивент кидается от нажатия на кнопочки номеронабирателя, которые заодно пищат DTMF'ками, чтобы юзеру привычно было. А выше уровнем его ловят, и либо добавляют к строке ввода, либо отправляют на сервер (если разговор уже идет).
            Ответить
          • IDEA же, вот только в линуксе дебаг часто падает.
            Ответить
            • Так плеера нету же. Отладчик мне fdb ближе, в ИДЕЕ нужно везде мышкой кликать, текст никогда не выделить / скопировать и т.д.
              Последний дебаговый плеер в Линуксе: 11.2, а текущая версия: 11.9, там уже куча всего поменялось. Кроме того, дебаговый плеер никогда таки нормально в 64-битной системе и не работал. Это всегда был 32-битный вариант, немного подправленый на скорую руку.

              А, да, еще отладчик в ИДЕЕ пытается найти исходник, чтобы его показать в редакторе, когда на бряк попадает. Но если исходник сгенерирован (из MXML), то он его найти не может, ну и автор, очевидно, эту ситуацию не предусмотрел, а пользователям, как правило, только перезапуск остается.
              Ответить
              • <<текст никогда не выделить / скопировать
                Где?

                Ну а с плеером пичалька, и скаута нету. В общем совсем не платформа для флешеров.
                Ответить
                • Ну в ИДЕЕ они любят показать модальное окно, например, в тот момент, когда нужно скопировать текст из под него, или например вывести текст ошибки в табличке, в которой текст вообще в принципе не выделяется. Еще, особенно хорошие варианты бывают, когда текст в комбобоксе, и оттуда тоже не выковырять. Ну, типичный Ява-интерфейс.
                  Ответить
      • Читал комментарий, решил что я на flasher.ru нахожусь ))
        Ответить
        • http://www.flasher.ru/forum/showthread.php?t=203860
          Даже страшно подумать, чем они там занимаются.
          Ответить
          • Славная тема. Такое ощущение будто подглядываю в замочную скважину а там оргия голодных программистов.
            Ответить
          • Название раздела должно было вам на что-то намекнуть.
            Ответить
    • в тред призывается Кузя
      Ответить

    Добавить комментарий