|
|
|||||
Координаты клипа - слушатель мыши
Здравствуйте.
Вопрос скорее по алгебре, чем по AS3, но все же рядом... Итак есть слушатель MOUSE_MOVE - слушает область размером с весь stage Самое простое - привязать к курсору клип: мне понадобилось инвертировать управление - решил так: т.о. курсор мыши и mc встречаются на половине stage.width а вот дальше... в общем мне нужно, чтобы координаты клипа зависели еще и от тех координат, что были у него на момент попадания мыши на область stage. Например, мышь покинула область прослушивания при mouseX==300, и mc остановился в координате mc.x==150 Когда мышь вернулась на область прослушивания при mouseX==200, то mc и курсор должны встретиться уже в другой координате (200-150)/2 и там встречаться (а также расходиться вокруг этой координаты) до тех пор пока мышь не отвалит за край stage.
__________________
О добром, разумном, вечном... Последний раз редактировалось deep70; 24.12.2010 в 01:10. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Давайте Вы еще разок подумаете и еще разок опишите чего хотите. Ибо я, например, с трудом себе представляю как мышь на координате х=200 встретится с клипом, который в координате х=150 - в точке х=25, при инверсии(!). Удачи.
__________________
Reality.getBounds(this); |
|
|||||
Не совсем понял задачу, но в любом случае мне кажется можно оперировать исключительно дельтой.
Т.е. не присваивать иксу мувиклипа какое-то статичное значение каждый раз, а делать что-то типа: С такой структурой нам пофиг будет где клип находится, законы для него будут одинаковые в любой точке и любой момент времени. Ну там проверки еще навесить чтоб мувиклип за екран не улетел.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Не знаю.. я так понял что речь идет о "центре" вокруг которого действует инверсия. Когда мышь заходит в область, определяем новый центр - точку между мышью и клипом, и дальше вокруг нее пляшем, то есть мышь приближается к центру - клип приближается, мышь удаляется от центра - клип удаляется.
__________________
Reality.getBounds(this); |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
package { import flash.display.Sprite; import flash.events.Event; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.MouseEvent; /* * * * * * * * * * * * * @author wolsh * * * \* * * * * * * * * */ public class Main extends Sprite { private var _mc :Sprite = new Sprite(); private var _center :Sprite = new Sprite(); private var _floor :Sprite = new Sprite(); private var _centerX :Number; private var _centerY :Number; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stage.showDefaultContextMenu = false; // entry point _floor.graphics.beginFill(0xEEEEEE); _floor.graphics.drawRect(0, 0, 400, 400); this.addChild(_floor); _floor.x = _floor.y = 100; _center.graphics.beginFill(0x00FF00); _center.graphics.drawCircle(0, 0, 2); _center.x = _center.y = 200; _floor.addChild(_center); _mc.graphics.beginFill(0x000000); _mc.graphics.drawCircle(0, 0, 5); _mc.x = _mc.y = 200; _floor.addChild(_mc); _floor.addEventListener(MouseEvent.ROLL_OVER, onRollOver); _floor.addEventListener(MouseEvent.ROLL_OUT, onRollOut); } private function onRollOut(event:MouseEvent):void { stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove); } private function onRollOver(event:MouseEvent):void { _centerX = _floor.mouseX - (_floor.mouseX - _mc.x) / 2; _centerY = _floor.mouseY - (_floor.mouseY - _mc.y) / 2; _center.x = _centerX; _center.y = _centerY; stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove); } private function onMove(event:MouseEvent):void { _mc.x = Math.max(0, Math.min(_centerX - (_floor.mouseX - _centerX), 400)); _mc.y = Math.max(0, Math.min(_centerY - (_floor.mouseY - _centerY), 400)); event.updateAfterEvent(); } } }
__________________
Reality.getBounds(this); |
|
|||||
Ну раз пошла такая пьянка вот и продолжение моей идеи
package { import flash.display.Sprite; import flash.events.Event; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.MouseEvent; /** * * * * * * * * * * * @author wolsh * * * * * * * * * * * * */ public class Main extends Sprite { private var _mc :Sprite = new Sprite(); //private var _center :Sprite = new Sprite(); private var _floor :Sprite = new Sprite(); //private var _centerX :Number; //private var _centerY :Number; private var _lastMouseX:int; private var _lastMouseY:int; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stage.showDefaultContextMenu = false; // entry point _floor.graphics.beginFill(0xEEEEEE); _floor.graphics.drawRect(0, 0, 400, 400); this.addChild(_floor); _floor.x = _floor.y = 100; /*_center.graphics.beginFill(0x00FF00); _center.graphics.drawCircle(0, 0, 2); _center.x = _center.y = 200; _floor.addChild(_center);*/ _mc.graphics.beginFill(0x000000); _mc.graphics.drawCircle(0, 0, 5); _mc.x = _mc.y = 200; _floor.addChild(_mc); _floor.addEventListener(MouseEvent.ROLL_OVER, onRollOver); _floor.addEventListener(MouseEvent.ROLL_OUT, onRollOut); } private function onRollOut(event:MouseEvent):void { stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove); } private function onRollOver(event:MouseEvent):void { /*_centerX = _floor.mouseX - (_floor.mouseX - _mc.x) / 2; _centerY = _floor.mouseY - (_floor.mouseY - _mc.y) / 2; _center.x = _centerX; _center.y = _centerY;*/ _lastMouseX = mouseX; _lastMouseY = mouseY; stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove); } private function onMove(event:MouseEvent):void { //_mc.x = Math.max(0, Math.min(_centerX - (_floor.mouseX - _centerX), 400)); //_mc.y = Math.max(0, Math.min(_centerY - (_floor.mouseY - _centerY), 400)); var deltaX:int = _lastMouseX - mouseX; var deltaY:int = _lastMouseY - mouseY; _mc.x = _mc.x + deltaX > 400 ? 400 : _mc.x + deltaX < 0 ? 0 : _mc.x + deltaX; _mc.y = _mc.y + deltaY > 400 ? 400 : _mc.y + deltaY < 0 ? 0 : _mc.y + deltaY; _lastMouseX = mouseX; _lastMouseY = mouseY; event.updateAfterEvent(); } } }
__________________
Кто к нам с чем для чего - тот у нас того от того. Последний раз редактировалось Dukobpa3; 24.12.2010 в 03:45. |
|
|||||
Цитата:
Это то что нужно! Большое спасибо за участие
__________________
О добром, разумном, вечном... Последний раз редактировалось deep70; 24.12.2010 в 16:19. |
Часовой пояс GMT +4, время: 10:12. |
|
« Предыдущая тема | Следующая тема » |
|
|