![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
А почему когда мышка выходит за ограничения то обьекты все равно двигаются, хотя слушатель удалён? Или он не удаляется пока не завершиться его работа? private function this_mouseMoveHandler(event:MouseEvent):void { if (mouseX > this.width) { trace('>'); stage.removeEventListener(MouseEvent.MOUSE_MOVE, this_mouseMoveHandler); this.removeEventListener(MouseEvent.MOUSE_DOWN, this_mouseDownHandler); } _target.x = mouseX - _distantion.x; _target.y = mouseY - _distantion.y; event.updateAfterEvent(); } |
|
|||||
|
Регистрация: Jun 2013
Сообщений: 133
|
Вероятно, потому что вы удаляете слушатель с спрайта, а подписаны на stage
надо |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Rivexe я опять внимания не обратил))) Спасибо!
Не знаю на сколько правильно ( очень надеюсь , что правильность прокомментируют ) но работает. package { import flash.display.DisplayObject; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Point; public class Drag extends Sprite { private var _container:Sprite; private var _spriteArray:Vector.<Sprite>; private var _conteinersArray:Vector.<Sprite>; private var _distantion:Point; private var _target:Sprite; private var _maxX:int; private var _maxY:int; private var _minX:int; private var _minY:int; 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); _conteinersArray = Vector.<Sprite>([]); this.addEventListener(MouseEvent.MOUSE_DOWN, this_mouseDownHandler); _container = new Sprite(); _conteinersArray.push(_container); 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); } _maxX = this.width; _maxY = this.height; _minX = this.width - this.width; _minY = this.height - this.height; } private function this_mouseDownHandler(event:MouseEvent):void { if (_conteinersArray.indexOf(event.target > 0)) { this.addEventListener(MouseEvent.MOUSE_UP, this_mouseUpHandler); stage.addEventListener(MouseEvent.MOUSE_MOVE, this_mouseMoveHandler); _target = event.target.parent as Sprite; _distantion = new Point(event.localX, event.localY); } } private function this_mouseUpHandler(event:MouseEvent):void { this.removeEventListener(MouseEvent.MOUSE_UP, this_mouseUpHandler); stage.removeEventListener(MouseEvent.MOUSE_MOVE, this_mouseMoveHandler); } private function this_mouseMoveHandler(event:MouseEvent):void { if (mouseX > _maxX || mouseX < _minX || mouseY > _maxY || mouseY < _minY) { stage.removeEventListener(MouseEvent.MOUSE_MOVE, this_mouseMoveHandler); this.removeEventListener(MouseEvent.MOUSE_UP, this_mouseUpHandler); _target = null; _distantion = null; return; } _target.x = mouseX - _distantion.x; _target.y = mouseY - _distantion.y; event.updateAfterEvent(); } } } |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 97
|
Цитата:
|
|
|||||
|
Регистрация: Dec 2012
Сообщений: 39
|
Попробуйте еще слушать вот это --
stage.addEventListener(Event.MOUSE_LEAVE,leaveStage); private function leaveStage(e:Event):void { //сработает когда курсор покинет флешку } истина если в границах сцены, и действовать в зависимости от этого Последний раз редактировалось temp; 27.09.2013 в 20:27. Причина: поставил лишнюю "}" ;-) |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
temp Спасибо! я помню, что есть какое то событие, которое за выход за сцену отвечает. Искал его, но в событиях мыши. Жалко, что нет события отвечающего за выход за рамку...
|
![]() |
![]() |
Часовой пояс GMT +4, время: 10:46. |
|
|
« Предыдущая тема | Следующая тема » |
|
|