![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2009
Сообщений: 176
|
Приветствую!
как можно драгать мувик в рамках круга? |
|
|||||
|
Регистрация: Nov 2009
Сообщений: 176
|
мувик который надо драгать прямоугольник
|
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Перемещайте по MOUSE_MOVE, с учетом ограничений (если дальше радиуса, то не двигать, например), в чем проблема?
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
в обще-то не такая тривиальная задачка, если нужно, чтобы прямоугольник скользил углами по внутренней кромке круга, например..
у меня такой вариант нарисовался, он не оптимальный по количеству вычислений, но понятный зато ![]() public class Main extends Sprite { private var center:Point = new Point(200, 200); private var R:Number = 100; private var sample:Sprite = new Sprite(); private var prevMousePoint:Point; public function Main():void { graphics.beginFill(0x000000, 0.1); graphics.drawCircle(center.x, center.y, R); sample.buttonMode = true; sample.graphics.beginFill(0x008000); sample.graphics.drawRect(0, 0, 60, 40); sample.x = 200; sample.y = 200; sample.rotation = 30; addChild(sample); sample.addEventListener(MouseEvent.MOUSE_DOWN, sample_mouseDown); } private function sample_mouseDown(e:MouseEvent):void { stage.addEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMove); stage.addEventListener(MouseEvent.MOUSE_UP, stage_mouseUp); // если нужна потеря драга при уводе мышки //sample.addEventListener(MouseEvent.MOUSE_OUT, stage_mouseUp); prevMousePoint = new Point(mouseX, mouseY); } private function stage_mouseUp(e:MouseEvent):void { stage.removeEventListener(MouseEvent.MOUSE_UP, stage_mouseUp); stage.removeEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMove); } private function stage_mouseMove(e:MouseEvent):void { // двигаем как в обычном драге sample.x += mouseX - prevMousePoint.x; sample.y += mouseY - prevMousePoint.y; prevMousePoint = new Point(mouseX, mouseY); // сдвигаем, чтоб все углы вместились var rec:Rectangle = sample.getBounds(sample); var corners:Array = [ sample.localToGlobal(rec.topLeft), sample.localToGlobal(new Point(rec.right, rec.top)), sample.localToGlobal(rec.bottomRight), sample.localToGlobal(new Point(rec.left, rec.bottom)) ]; var dir:Number = Math.atan2(sample.y - center.y, sample.x - center.x); var dX:Number = Math.cos(dir); var dY:Number = Math.sin(dir); for (var i:int = 0; i < 4; i++) { var p:Point = corners[i]; while (Point.distance(center, p) > R) { p.x -= dX; p.y -= dY; sample.x -= dX; sample.y -= dY; } } } } |
|
|||||
|
Регистрация: Nov 2009
Сообщений: 176
|
большое спасибо!!!
|
![]() |
![]() |
Часовой пояс GMT +4, время: 17:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|