![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 33
|
hi
класс Btn расширяет MovieClip class c целью добавить переменные. swf с рядом символов, имеющих такие классы - кнопки, стрелки и т.п. загружается как внешняя библиотека символов в главный swf. там создается array из загруженных классов -[[class Arrow_01],[class Btn_LeftMain],[class BtnRightMain],[class Btn_01]]. Я не могу получить данные из полей экз-ов Btn при наступлении события MouseEvent.CLICK var i : Number; for(i = 0;i < 4;i++) { var t:DisplayObject =new visualAssets[2](); t["xx"]=i; t.addEventListener(MouseEvent.CLICK, onMouseСlickHandler); trace("t[xx] :"+t["xx"])//отлично трейсит private function onMouseClickHandler(evt:Event) : void { var b:DisplayObjectСontainer=evt.target as DisplayObjectContainer; trace("b[xx]:" +b['xx']) //не работает! b["xx"] пробовал. Если привести к реальному названию класса Flash ругается -нет класса такого. } } я уж не говорю о приведении к типу класса. Я делаю в FDT, создаю даже swc, где виден класс Btn. но при компиляции во Флэш переменную не вытащить, а прbведение к классу приводит к ошибке -нет такого класса. Хотя FDT корректно себя ведет. 1. В чем ошибка? просто намекнуть можно. 2. var t: DisplayObjectContainer =new visualAssets[2](); как бы это привести к такому var t: visualAssets[2].toString()=new visualAssets[2](); то есть чтобы сразу и тип объекта задавался Спасибо! Особо разжевывать не надо намек (не в help) был бы суперпомощью. Поучения бесцеремонные просьба оставлять при себе. Добавлено через 49 минут так конечно работает, но это как коряво. Хотя точно отвечает задаче -указать раздел, висящий на кнопке для сообщения медиатору. Последний раз редактировалось F_attaka; 29.04.2009 в 06:51. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
1. В подходе. Что вы там в xx хранить собрались? Для связи вьювер<->данные пишут хеш, используя, например, Dictionary;
2. Никак. Можно наследовать все кнопки от одного базового класса или на каждую повесить интерфейс, у которого есть геттер xx. Но для работы, как с DisplayObject, всё равно придется кастить. |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 33
|
1. кнопка всегда хранит что-то. Как минимум ID. Как максимум -больше ничего. Или?
2. если много классов интерфейса -то ведь логично, зная их положение в Array или в Dictionary, не задавать вручную тип. Хотя по длине кода -тоже и выходит... Но явно ручками задавать как-то не хочется. Хочется, чтобы скрипт вытянул название класса и сам типизировал создаваемый объект, а я для этого только подставил позицию нужного класса в arrayOfClasses . в целом это просто кнопка для смены раздела. Можно, конечно, расширить MovieClip и загрузить просто графику в класс и не заморачиваться. но задела тема переменных в загруженном swf. Последний раз редактировалось F_attaka; 29.04.2009 в 09:36. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
1. Ничего не хранит;
2. Типизировал к чему? Объект от этого не изменится. з. Ы. Я вообще на работе. |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 33
|
1. в любом случае надо знать какая кнопка, для разных целей, хотя бы остальные поставить на новые координаты. Как скрипт идентифицирует нажатую кнопку? если она сама не сообщит или ее не отследят (но все равно надо ее идентифицировать ведь).Везде кнопка имеет уникальный id, ИМХО. да не я один такой. вот примитивно, конечно, в части кнопки -http://hubflanger.com/building-a-flash-site-using-puremvc/ 8 абзац. передается ID .
собственно по этому и ползу тьюториалу. private function onMouseDownHandler(evt:Event) : void { // DISPATH EVENT TO PureMVC var b:Object=evt.currentTarget as Object; dispatchEvent(new MenuBtnEvent(MenuBtnEvent.MENU_BTN_PRESS, b["ID"])); } } var t: visualAssets[2].toString()=new visualAssets[2](); то есть чтобы сразу и тип объекта задавался. Автокомлит в том же FDT работает ведь когда есс-но тип задан объекта. Я же не подставлю t.xx если это не кастом класс, содержащий setter "xx" , допустим. А если это через 300 строк кода сквозняком идет и проверки нет, так как тип не задан объекта? Последний раз редактировалось F_attaka; 29.04.2009 в 09:59. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
1. По хешу Dictionary button -> id. PureMVC — не панацея и не эталон программирования. И автор туториала не знает, что такое Dictionary, либо просто не умеет им пользоваться.
|
|
|||||
|
Регистрация: Apr 2009
Сообщений: 33
|
хорошо, я подумаю. Dictionary использовал, но не злостно.
откуда такие идеи- кто из мэтров -где читать? или он передо мной? .создавая меню, все кнопки помещаем в dictionary. в хэндлере проверяем, какая нажата была и отдаем все данные, с ней ассоциированные, из Dictionary? спасибо за идеи. если я правильно их понял. делал я и так -подобно вернее... если я правильно вас понял... Последний раз редактировалось F_attaka; 29.04.2009 в 11:35. Причина: яснее выразился |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Уникальным идентификатором кнопки является простая ссылка на неё. Поэтому ключами Dictionary будут ссылки на кнопки, а значениями — данные. Например, ID или номер кнопки или ещё как угодно.
|
|
|||||
|
Регистрация: Apr 2009
Сообщений: 33
|
конечно. и не надо никаких расширений в этом случае MovieClip.
спасибо! |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:12. |
|
|
« Предыдущая тема | Следующая тема » |
|
|