![]() |
|
||||||||||
|
|||||
|
Регистрация: Sep 2010
Сообщений: 90
|
Есть цикл в котором создаются кнопки, по нажатию каждой из которых должен запускаться соответствующий ей метод.
пример цикла: var i:int; for (i = 0; i < 10; i++) { var btn:UIButton; btn = new UIButton(); btn.id = i; btn.handler = function():void { trace(btn.id); } } Помогите, пожалуйста, сделать корректное создание хендлеров с выводом идентификатора его кнопки. |
|
|||||
|
Анонимные функции – зло. Создайте одну функцию.
|
|
|||||
|
Регистрация: Sep 2010
Сообщений: 90
|
Цитата:
|
|
|||||
|
Цитата:
Не может быть того, чтобы кнопки можно было нажать мышью, но при этом нельзя было повесить никаких слушателей. По-моему только с SimpleButton какая-то фигня подобная |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 90
|
Кнопки наследуются от общего класса объектов, который не наследуется от классов экранных объектов, а лишь хранит информацию о массиве пикселей, которые идут в отрисовку, позиции, где их рисовать, порядке отрисовки, bound-бокса объекта и т.п. А слушатель можно повесить только на дисплей обджект, насколько я помню. Чем помогут? На мой взгляд copyPixels самый быстрый способ отрисовки, во всяком случае спрайты и мувиКлипы у меня сильно грузили сцены.
|
|
|||||
|
я тоже не понял прикола с невозможнстью повесить мышиные слушатели при том, что 'нужно выводить при нажатии на нее ее id'
по сути вопроса в этом анонимном handler'е видна var btn:UIButton, которая после отработки цикла естественно указывает на последний, а нужна ссылка на конкретный экземпляр т.е. если нужен изврат с определением handler именно в цикле, то как-то так это может быть (это только для посмотреть, здесь конечно логичнее этот handler в самом UIButton и определить) package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; public class Main extends Sprite { public function Main():void { var i:int; for (i = 0; i < 10; i++) { var btn:UIButton; btn = new UIButton(); btn.id = i; btn.y = i * 25; addChild(btn); btn.handler = function():void { trace("this.id: " + UIButton(this).id); trace("btn.id: " + btn.id); } } // чтобы как-то посмотреть работу btn.handler this.addEventListener(MouseEvent.CLICK, this_click); } private function this_click(e:MouseEvent):void { var btn:UIButton = e.target as UIButton; btn.handler(); } } } import flash.display.Sprite; class UIButton extends Sprite { public var id:int; public var handler:Function; public function UIButton() { graphics.beginFill(0x0); graphics.drawRect(0, 0, 60, 20); } } |
|
|||||
|
[+1 05.11.12]
Регистрация: Feb 2011
Сообщений: 431
|
А на клик вы водписываете stage или другой контейнер, и потом смотрите где клик упал, и именно тот объект который находится под курсором и ловит его ?
|
|
|||||
|
[+4 06.05.14]
|
Цитата:
Так кто же прав, когда GC одинаков почти в этих 2х языках?
__________________
Марк Tween |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 90
|
silin, я описал почему нет возможности - мои объекты не являются наследниками экранных объектов флеша, они все просто набор информации о пикселях и в каком месте их рисовать в общем битмап-листе, выводимом на экран. Да, я жертвую слушателями (хотя, редко когда они действительно мне нужны) взамен скорости.
Цитата:
Цитата:
|
|
|||||
|
[+1 05.11.12]
Регистрация: Feb 2011
Сообщений: 431
|
А если объекты накладываются друг на друга, как вы вычислите кто ловит событие ?
|
![]() |
![]() |
Часовой пояс GMT +4, время: 04:05. |
|
|
« Предыдущая тема | Следующая тема » |
|
|