![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Mar 2009
Сообщений: 107
|
Доброго времени суток.
Столкнулся с такой проблемой, нужно передать данные в функцию которая вызывается событием. Мне на другом форуме подсказали одно решение, хотел бы обсудить насколько предложенный там вариант является корректным и верным? Вот вспомогательный класс сюда записываем все нужные мне переменные для передачи: package main{ import flash.display.Sprite; public class mySprite extends Sprite { public var id:*; public function mySprite():void { super(); } } } package main{ import flash.display.Sprite; public class myClass extends Sprite { public var sp:Array = new Array(); public function myClass():void { for (var i:int = 0; i <= 50; i++) { sp[i] = new mySprite(); sp[i].id = i; sp[i].addEventListener(MouseEvent.MOUSE_UP, myMouseUp, false, 0, true); } } private function myMouseUp(e:MouseEvent):void { trace('id:'+e.currentTarget.id); } } } Последний раз редактировалось vvvvvvf; 07.06.2009 в 00:14. |
|
|||||
|
больше никогда не ходите на тот сайт...
Самый нормальный, но может самую малость муторный, это создание кастомного события. наследуетесь от Event и передаете через него то что нужно. А это ужас. |
|
|||||
|
а смущает засорение памяти какими непонятными классами контейнерами.
Хотя может я и чего то не понимаю. |
|
|||||
|
т.е. создание кастомного евента плюс необходимость диспатчить его, дублируя штатный, тебя не смущает, а вот по-простому добавить свойство объекту почему-то смущает..
тем более, что в примере не "непонятный класс контейнер", а просто спрайт, расширенный свойством id к слову: можно и не расширять спрайт, а писать этот id в name, например |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 107
|
Цитата:
Добавлено через 37 секунд Можешь тоже пример дать |
|
|||||
|
а чем тобой приведенный не устраивает?
вот он же, но с хранением id в name public class Main extends Sprite { public function Main():void { for (var i:int = 0; i < 10; i++) { var s:Sprite = new Sprite(); s.graphics.beginFill(0x000000); s.graphics.drawRect(0, 0, 20, 20); s.x = 30 * i; s.name = i.toString(); addChild(s); } addEventListener(MouseEvent.CLICK, clickHandler); } private function clickHandler(evnt:MouseEvent):void { var s:Sprite = evnt.target as Sprite; if (s) { var id:String = s.name; trace( "id : " + id ); } } } public class Main extends Sprite { private var _dict:Dictionary = new Dictionary(); public function Main():void { for (var i:int = 0; i < 10; i++) { var s:Sprite = new Sprite(); s.graphics.beginFill(0x000000); s.graphics.drawRect(0, 0, 20, 20); s.x = 30 * i; addChild(s); _dict[s] = i; } addEventListener(MouseEvent.CLICK, clickHandler); } private function clickHandler(evnt:MouseEvent):void { var id:*= _dict[evnt.target]; trace( "id : " + id ); } } |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
А что сразу «*»-то?
|
|
|||||
|
* из-за того, что undefined для int, например, трактуется как 0 и для отсутствующего в словаре элемента поимеем путаницу
т.е. получается, что кастить надо после того как убедишься, что элемент есть |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
if (event.target in this._dict) и вперед.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 21:12. |
|
|
« Предыдущая тема | Следующая тема » |
|
|