![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 97
|
опишу суть проблемы:
1 имеется фоновый спрайт, на него добавляются спрайты потомки 2 необходимо двигать родительский спрайт, за спрайты потомки, т.е. наводим мышку на потомка, он подсвечивается, начинаем тянуть и вместе с ним тянется родительский класс собственно ничего сложного, я создал один спрайт, добавил в него спрайтов-потомков, повешал на них события разные, всё работает, но есть проблемы, которые уже два дня не могу решить(( перемеoение осуществляю используя start/stop drag, при уходе курсора мышки за экран, всё останавливается и скачет при возвращении, это первое, плюс необходимо осуществитьсброс перетаскивания, при попадании мышки на другой объект или выходу за пределы, пробовал вешать событие OUT, возникла проблема, фокус почему то определяется не у родителя, а у потомка, хотя слушатель на родителе addChild(fon); fon.addChild(spt1); fon.addChild(spt2); fon.addChild(spt3); fon.addEventListener(MouseEvent.MOUSE_DOWN, nach); fon.addEventListener(MouseEvent.MOUSE_UP, kon); fon.addEventListener(MouseEvent.MOUSE_OUT, kon); Последний раз редактировалось kelod; 27.09.2013 в 16:22. |
|
|||||
|
Регистрация: Feb 2009
Сообщений: 57
|
можно сделать так
Вешаем на спрайты потомок слушатель а по поводу второй задачи еще не думал, тут можно подумать над тем что например запустить энтерфрейм, во время нажатия и отслеживать например положение курсора если она ушла за пределы, или достигла некой области, выключать перетаскивание, удалять слушатель, по нажатию снова создавать этот слушатель |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 97
|
дело в том что у меня будет очень много потомков, по-моему не очень разумно вешать на каждый слушатель.
про энтерфрайм я думал, но это не лучшее решение, так как в сцене могут присутствовать и другие элементы, при наведении на которых мышью перетаскивание тоже должно останавливаться, т.е. мне нужно просто узнать какой элемент находиться в данный момент под мышью, либо придумать как сделать так что бы слушатель на родителе работал не с одним потомком, а со всеми сразу |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
package { import flash.display.DisplayObject; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; public class Drag extends Sprite { private var _container:Sprite; private var _spriteArray:Vector.<Sprite>; public function Drag() { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(event:Event=null):void { removeEventListener(Event.ADDED_TO_STAGE, init); addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); _container = new Sprite(); super.addChild(_container); var circle:Sprite; _spriteArray = Vector.<Sprite>([]); for (var i:int = 0; i < 10; i++) { circle = new Sprite(); circle.graphics.beginFill(Math.random() * 0xf6f6f6); circle.graphics.drawCircle(Math.random() * stage.stageWidth, Math.random() * stage.stageHeight, 30); circle.graphics.endFill(); _spriteArray.push(circle); _container.addChild(_spriteArray[i] as DisplayObject); } } private function mouseDownHandler(event:MouseEvent):void { event.target.parent.startDrag(); } } } |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 97
|
Akopalipsis, вопрос был про завершение перетаскивания, а не про его начало, начало перетаскивания я делаю так же
в ващем примере если добавитm событие out срыв мыши происходит так же как и у меня Последний раз редактировалось kelod; 27.09.2013 в 16:21. |
|
|||||
|
Регистрация: Feb 2009
Сообщений: 57
|
Цитата:
если не вешать слушатели на потомки, остается таскать именно сцену, но слушатель может быть один, а в зависимости от выбранного объекта на сцене, выполнять предназначенный функционал. Если же роль сцены заключается лишь в том, что ее нужно таскать, при чем хватая в разных местах, будь то, объект, или просто пустая область, и больше не взаимодействовать с другими объектами, то достаточно наложить с верху прозрачный спрайт, который и будет отвечать за область захвата. или вы хотите таскать всю область хватая любой объект при этом не вешая на них слушатель? так не получится. |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 97
|
Цитата:
PS: я конечно написал костыль, который позволяет это обойти, но хотелось бы нормальное решение услышать |
|
|||||
|
[+1 25.10.13]
[+4 18.03.14] |
|
|
|||||
|
Регистрация: Jun 2013
Сообщений: 133
|
Проверяй с какого объекта пришло событие и является ли он потомком.
|
|
|||||
|
[+1 25.10.13]
[+4 18.03.14] |
уберите страшный код пожалуйста
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:25. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|