|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Цитата:
Сам ещё поразмыслил и переделал по классике. Но у меня ещё такой вопрос по ходу родился. Если у нас в одном методе меню создаётся, а в другом обрабатывается и убирается, то область видимости переменной, в которую записывается экземпляр меню, ограничена методом-создателем, и её не получается передать в метод, принимающий события от меню. В общем, вот так я выкрутился. Ниже кусок кода View. Это нормально? private function showMenuHandler(event:Event) : void { var options : Array = MinigameModel(event.target).menuOptions; var simpleMenu:SimpleMenu = new SimpleMenu(stage.width, stage.height - MAIN_TEXT_AREA_HEIGHT, options); this.addChild(simpleMenu); simpleMenu.addEventListener(MenuEvent.MENU_SELECT, menuSelectHandler); } private function menuSelectHandler (event: MenuEvent):void { dispatchEvent (new MenuEvent(MenuEvent.MENU_COMMAND, event.id)); event.target.removeEventListener(MenuEvent.MENU_SELECT, menuSelectHandler); this.removeChild(event.target as SimpleMenu); } Последний раз редактировалось Appleman; 06.11.2017 в 16:59. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Второй момент касается безопасности некоторых операций. Например, надо буквально завести себе привычку перед removeChild() ВСЕГДА проверять, есть ли парент и есть ли чайлд. Общепринятая конструкция выглядит так: Даже когда тебе кажется что ну никак не может возникнуть ситуация, что меню не дитя Вью, иногда случаются совершенно волшебные казусы, вызванные особой очередностью выполнения обработчиков и кода текущего фрейма. Ну и совсем в порядке ворчания — если начал писать this. то пиши его везде. Одинокий, висящий в воздухе "dispatchEvent" смотрится каким-то робким и неуверенным в себе. К слову, олдскульные холиварщики подняли бы тебя на смех, убеждая что здесь вообще не this., а строго super. Потому что писать this. надо исключительно перед твоими кастомными методами данного наследника, которых нет в супер-классе. А если вызываешь унаследованный от суперкласса метод, будь добр так и писать: super.addChild(), super.dispatchEvent()
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Цитата:
Цитата:
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Когда-нибудь тебе доведется впервые написать не dispatchEvent() и даже не this.dispatchEvent(), а какой-нибудь stepper.buttonPlus.dispatchEvent(), и тогда ты прочувствуешь, что может быть и такое, и что у метода должен быть хозяин (ну, не всегда, но то отдельный разговор), а вызов метода без объекта-хозяина делает код похожим на функциональное программирование, а не на ООП. Когда ты привыкнешь мыслить объектами, умеющими делать то-то и то-то, а не функциями, тебе самому захочется всегда указывать, КТО делает вот ЭТО.
По поводу событий я уже говорил, что Меню не обязательно иметь собственный класс события, можно обойтись коробочным DataEvent, заведя пару констант для различения типов прямо в классе Меню. То есть: new DataEvent(Menu.SELECT, ..., button.id); Для Вью же, с его РАЗНООБРАЗИЕМ событий, иметь собственный класс событий положено по рангу.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Цитата:
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Цитата:
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 08.11.2017 в 13:07. |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Цитата:
Пока имеем скачанный ShoeBox (с ним вроде всё понятно) и простенький ассет-менеджер, который умеет выдавать предварительно за-[embed]-женный Bitmap по строковому идентификатору. Понятно, что загруженный спрайтшит нарезаем на кусочки, BitmapData каждого помещаем в массив. В моём понимании это будет делать отдельный класс (или нет?). И главный вопрос, как наиболее удобно организовывать выбор нужного элемента? У меня пока модель выдаёт строковые идентификаторы (например, для нужной картинки с портретом). Как от них перейти к нужной битмапдате? |
|
|||||
Храни битмабы в Object или Dictionary. У них обоих допустимы строковые ключи. Я бы даже сказал, если ключи только строковые, то вполне хватит простого Object, в качестве ассоциативного массива
__________________
Ко мне можно и нужно обращаться на ты) |
Часовой пояс GMT +4, время: 14:04. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|