![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Господа знатоки, решения на нашёл, пришлось думать самому.
Говорили, что в ас3 событие мыши передаёца не тока parent'у, но и child'у. На данный момент имею ситуацию, что если child'ов больше 3(вроде как...), то 4 и последующие чайлды не получают событие CLICK'a. Структура такая: UIComponent (aka parent) -Sprite == getChildAt(0) - Sprite - Sprite - Sprite - Sprite -Sprite == getChildAt(1) - Sprite - Sprite - Sprite - Sprite -Sprite == getChildAt(2) - Sprite - Sprite - Sprite - Sprite -Sprite == getChildAt(3) - Sprite - Sprite - Sprite - Sprite getChildAt(1) содержит спрайты, в которых есть MovieClip's, слушающие MouseEvent.CLICK, но до них событие не доходит, хотя, если слушателей разместить в getChildAt(2) или getChildAt(3), к примеру, то всё отлично, в том числе(!!!) useHandCursor срабатывает на 2 и 3 слое, а на 1 и 2 - нет. Слои - это слои карты (карта, нижние объекты, игроки, верхние объекты) картый слой разбит на тайлы, к каждому тайлу привязаны свои child'ы (игроки) mouseChildren = true, для UIComponent. Собственно, ПОМОГИТЕ_))))) умераю....)) |
|
|||||
|
4AM Games
|
Событие не передается Child'ам. Событие передается от Stage до инициатора, и потом обратно на Stage.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^ |
|
|||||
|
Тогда такой вопрос - как мне сделать так, чтобы объекты в самой ж... хм... глубине таки получили событие CLICK?
|
|
|||||
|
4AM Games
|
Stage
-Root --Initiator ---SomeChild ----AssLevel AssLevel должен подписатся на MouseEvent.CLICK событие Initiator'а.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^ |
|
|||||
|
почему то e.target == SomeChild, но не AssLevel (
Где viewPort == Initiator |
|
|||||
|
Тоесть мой MovieClip aka AssLevel не инициирует это событие, я так понимаю?
![]() Мне важно отследить клик именно на AssLevel, а не на "высших" относительно него мувиклипах) Добавлено через 3 минуты опа. Нет. там даже инициатор выступает getChildAt(3), как оказалось |
|
|||||
|
4AM Games
|
package { import flash.display.Sprite; import test.Test3; import flash.utils.getTimer; import flash.events.Event; import flash.utils.Timer; import flash.text.TextField; import flash.events.MouseEvent; import flash.display.StageScaleMode; import flash.display.StageAlign; public class Test extends Sprite { private var debugField:TextField; public function Test() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.addEventListener(MouseEvent.CLICK, debugClick); this.addEventListener(MouseEvent.CLICK, debugClick); var b1:SquareButton = addChild(new SquareButton(0, 0, 150, 150, 0xFF0000, 'Red')) as SquareButton; b1.addEventListener(MouseEvent.CLICK, debugClick); var b2:SquareButton = b1.addChild(new SquareButton(50, 50, 100, 100, 0x00FF00, 'Green')) as SquareButton; b2.addEventListener(MouseEvent.CLICK, debugClick); var b3:SquareButton = b2.addChild(new SquareButton(50, 50, 50, 50, 0x0000FF, 'Blue')) as SquareButton; b3.addEventListener(MouseEvent.CLICK, debugClick); } private function debugClick(event:MouseEvent):void { if(!debugField) { debugField = addChild(new TextField) as TextField; debugField.border = debugField.multiline = debugField.background = true; debugField.width = stage.stageWidth; debugField.height = stage.stageHeight - 200; debugField.x = 0; debugField.y = 200; debugField.text = 'Welcome' + '\r'; } debugField.appendText('target=' + event.target + ' currentTarget=' + event.currentTarget + '\n'); } } } import flash.display.Sprite; class SquareButton extends Sprite { internal var id:String; function SquareButton(x:uint = 0, y:uint = 0, width:uint = 20, height:uint = 20, color:uint = 0xFFFFFF, id:String = null) { this.x = x; this.y = y; this.id = id; draw(width, height, color); } internal function draw(width:uint, height:uint, color:uint):SquareButton { graphics.beginFill(color); graphics.drawRect(0, 0, width, height); graphics.endFill(); return this; } override public function toString():String { return '[SquareButton ' + id + ']'; } }
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^ |
|
|||||
|
Есть мнение, что из-за того, что я в Flex-среде работаю, он своими обработчиками перебивает boobles в false...
*Тест посмотрел, работает. Видимо что-т не то.....* Добавлено через 2 минуты var b1:SquareButton = addChild(new SquareButton(0, 0, 150, 150, 0xFF0000, 'Red')) as SquareButton; b1.addEventListener(MouseEvent.CLICK, debugClick); var b2:SquareButton = b1.addChild(new SquareButton(50, 50, 100, 100, 0x00FF00, 'Green')) as SquareButton; b2.addEventListener(MouseEvent.CLICK, debugClick); var b3:SquareButton = b2.addChild(new SquareButton(50, 50, 50, 50, 0x0000FF, 'Blue')) as SquareButton; b3.addEventListener(MouseEvent.CLICK, debugClick); var b4:SquareButton = b2.addChild(new SquareButton(50, 50, 50, 50, 0xFF00FF, 'Blue2')) as SquareButton; b4.addEventListener(MouseEvent.CLICK, debugClick); b3 становиться недоступной. Вот видимо почему у меня не работает... Надо придумать, как передать управление на слой ниже... Как то так %) Последний раз редактировалось tas; 15.06.2009 в 01:11. |
|
|||||
|
4AM Games
|
Я тоже пишу в Flex, никогда в жизни он ничего не перебивал. Вообще нарисуйте диаграмму, кто кого ребенок, я не уверен что я правильно понимаю ваши объяснения, кто где.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^ |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:56. |
|
|
« Предыдущая тема | Следующая тема » |
|
|