Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   движение по направлению мыши (http://www.flasher.ru/forum/showthread.php?t=118360)

Danss 21.11.2008 14:31

движение по направлению мыши
 
Помогите, пожулуйста, реализовать следущее:

кликаем мышкой в любом месте рабочего поля, и мувик движется в направлении курсора и пролетает дальше с одинаковой скоростью.

я знаю простой способ как обьект привязать к мышке чтобы он летел к курсору и цеплялся к нему:

Код AS3:

_mc.x -= (_mc.x - mouseX) / 4;
_mc.y -= (_mc.y - mouseY) / 4;

Но как сделать чтобы при клике, мувик летел в направлении мыши и пролетал дальше с равномерной скоростью?
Заранее благодарю.

mad_god 21.11.2008 14:38

Похоже, нужно решить уравнение прямой, найти точку на прямой, котой принадлежит точка курсора.
Что то типа x + by + c = 0
Прямую можно провести через две точки , которые мы знаем:

точка курсора
центр мувика.

нужно найти точку, удалённую от этих двух точек.

Danss 21.11.2008 14:44

не совсем понял. Мне нужно в момент клика определить точку клипа и точку клика и как то установить прямую и задать движение?
хорошо, если я узнаю эти точки, то как все же реализовать движение? :)

mad_god 21.11.2008 15:15

наверно так же как и здесь у тебя:

Код AS3:

_mc.x -= (_mc.x - mouseX) / 4;
_mc.y -= (_mc.y - mouseY) / 4;

только вместо mouseX и mouseY нужна точка.Х точка .У.

Irradiance 21.11.2008 15:21

Код AS3:

var s:Sprite = new Sprite();
var time:int = 30;
var spdX:Number;
var spdY:Number;
 
addChild (s);
 
this.addEventListener (MouseEvent.MOUSE_DOWN, setProps);
 
function setProps (e:MouseEvent):void {
        spdX = (e.stageX - s.x)/time;
        spdY = (e.stageY - s.y)/time;
        if (!s.hasEventListener(Event.ENTER_FRAME)) s.addEventListener (Event.ENTER_FRAME, moveTarget);
}
 
function moveTarget (e:Event):void {
        s.x += spdX;
        s.y += spdY;
        trace (s.x, s.y);
}

скорость здесь только каждый раз разная, при желании можно и ее уровнять :)

NePridymal 21.11.2008 15:47

Это вопрос не по АС а по математике. Находим по двум точкам вектор, находим dx и dy в одну единицу времени для движения равномерного по этому вектору а дальше по таймеру делаем движение хоть до бесконечности.
Точки знаем (мувик и мышка), вектор найти можем. Никаких проблем

mad_god 21.11.2008 16:02

точно, дельту вычислить. Забыл как называется :) Вот только код кто-то напишет? ;)

gen4 21.11.2008 16:10

Код:

speed = 5
dx = (mc.x - mousex)/5
dy = (mc.y - mousey)/5

onFrame{
mc.x+=dx;
mc.y+=dy;
}


mad_god 21.11.2008 16:23

точно. Раз мувик летит в направлении мышки, то пусть и дальше продолжает лететь.

musat 21.11.2008 16:24

Вложений: 1
Вот, держите:
Код AS3:

package {
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
 
        public class Main extends Sprite {
                private var s:Sprite;
                private var dx:Number;
                private var dy:Number;
                private var speed:Number = 10;
 
                public function Main() {
                        s = new Sprite();
                        s.graphics.beginFill(0xFF0000);
                        s.graphics.drawCircle(10,10,10);
                        addChild(s);
 
                        stage.addEventListener(MouseEvent.MOUSE_DOWN,startMotion);
                }
 
                private function startMotion(e:MouseEvent):void {
                        dx = (mouseX - s.x) / speed;
                        dy = (mouseY - s.y) / speed;
 
                        if (!s.hasEventListener(Event.ENTER_FRAME)) s.addEventListener(Event.ENTER_FRAME,move);
                }
 
                private function move(e:Event):void {
                        s.x += dx;
                        s.y += dy;
                }
        }
}



Часовой пояс GMT +4, время: 02:14.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.