Форум 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=130595)

Neirol 29.09.2009 19:38

Движение за мышью с ускорением, и полным торможением к прибытию к мыши, как?
 
Знаю как определить угол поворота в сторону мышки, а следовательно и то, как двигать объект в сторону мышки.
Ускорение естественно тоже понятно.
Непонятно одно, как сделать так, чтобы объект в определенном месте (по расчетам) начинал тормозить так, чтобы он затормозил полностью в момент когда он столкнется с координатами мышки?

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

AL.exe 29.09.2009 19:47

Как вариант, по теореме Пифагора определять расстояние между объектом и курсором и домножать на него скорость объекта. Соответственно, чем ближе - тем медленнее, а в точке нахождения курсора расстояние будет нулевым, соответственно, объект остановится.

Neirol 29.09.2009 20:11

Т.е., скажем:
Код AS3:

if(hero.x > mouseX) var distanceX = (hero.x - mouseX) * speed;
else var distanceX = (mouseX - hero.x) * speed;
 
if(hero.y > mouseY) var distanceY = (hero.y - mouseY) * speed;
else var distanceY = (mouseY - hero.y) * speed;

И сама distance будет являться и скоростью для определения проекций скоростей на X и Y?
Т.е.
Код AS3:

hero.x += distanceX * Math.cos(angle);
hero.y += distanceY * Math.sin(angle);

Таким образом?

silin 29.09.2009 20:13

а че бы не по-простому
Код AS3:

public class MouseHunter extends Sprite
{
        private const a:Number = 0.2;
        public function MouseHunter()
        {
                graphics.beginFill(0);
                graphics.drawCircle(0, 0, 20);
                addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
        }
 
        private function onEnterFrameHandler(event:Event):void
        {
                x += a * mouseX;
                y += a * mouseY;
        }
}


Neirol 29.09.2009 20:36

Напиши пожалуйста решение для AS 3.0.
Твой вариант на AS 2.0.

Felicast 29.09.2009 21:26

Цитата:

Сообщение от Neirol (Сообщение 854481)
Напиши пожалуйста решение для AS 3.0.
Твой вариант на AS 2.0.

и где здесь as2? ниодного намека на as2 не вижу

Neirol 29.09.2009 22:37

Ну точно могу сказать что это не AS 3. Т.к. в AS 3 все методы расфасованы по пакетам, которые нужно подключать.
А также, некоторые методы используемые silin в AS 3 вообще удалены.

GFreemen 29.09.2009 22:44

Уважаемый, Neirol, вы не правы...

Neirol 29.09.2009 23:01

Ну тогда получается что это не я не прав, а Flash CS4 не прав :)
Я записал написанное silin в отдельный файл и назвал его так же, как и он назвал свой класс.
Далее самостоятельно подключил пакеты и в ответ получил ошибку:
Migration issue: The method drawCircle is no longer supported.
В замен которого, как я только что заметил должна идти функция drawOval (подсказывает флеш), хотя такую функцию он тоже не воспринимает....

И вдобавок такая ошибка насчет хэндлера EnterFrame....
1046: Type was not found or was not a compile-time constant: Event.

Добавлено через 34 секунды
Т.е. в итоге с моими исправлениями и подсказками флеша:
Код AS3:

package {
        import flash.display.Sprite;
        import flash.display.Graphics;
 
        public class MouseHunter extends Sprite
        {
                private const a:Number = 0.2;
                public function MouseHunter()
                {
                        graphics.beginFill(0);
                        graphics.drawOval(0, 0, 20);
                        this.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
                }
 
                private function onEnterFrameHandler(e:Event):void
                {
                        x += a * mouseX;
                        y += a * mouseY;
                }
        }
}


silin 29.09.2009 23:17

о сколько на открытий чудных..:)

Neirol, сори за непонятки,
просто объявление пакета и добавление необходимых импортов дело хоть и обыденно-обязательное, но к логике кода никакого отношения не имеет, поэтому и привел без них, здесь это в общем-то обычное явление, не удивляйся

Добавлено через 4 минуты
насчет 'The method drawCircle is no longer supported' компилятор тебя обманывает: еще поддерживается


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

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