Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как "толкнуть" мувик курсором мыши? (http://www.flasher.ru/forum/showthread.php?t=75551)

Music'ant 15.02.2006 08:25

Как "толкнуть" мувик курсором мыши?
 
Доброе время суток, уважаемые флэшеры!

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

У самого меня получилось вот что:

Код:

// определяем коэффициент замедления
onClipEvent(load){
        delay = .9;
}
//сообщаем объекту начальную скорость
on(rollOver){
        xSpeed=5;
        ySpeed=5;
}

onClipEvent (enterFrame) {
       
        // реализация замедления
        if (xSpeed<>0){
        xSpeed*=delay;
        ySpeed*=delay;
        _x+=xSpeed;
        _y-=ySpeed;
        }
       
        // условие полной остановки
        if(xSpeed<.01 and xSpeed<.01){
                xSpeed=0;
                xSpeed=0;
        }
       
}

Объект при этом постоянно двигается в одном направлении, а надо чтоб направление зависило от того, с какой стороны курсор коснется мувика.

Кто нибудь, одскажите пожалуйста! Заранее благодарен.

Antares 15.02.2006 09:25

Доброе. Пользуйтесь тэгом code в следующий раз, в противном случае листинг будет стерт.

По теме:

1. Определять угол. Math.atan2( _ymouse, _xmouse ) вернет от -Пи до Пи, но не проблема возвращать от 0 до 360 градусов.

2. Умножив на синус и косинус угла модуль скорости получить нужные скорости по осям.

meiciuc 15.02.2006 12:07

А можно для простых случаев вроде этого применять метод проще - работать не с углами, а непосредственно с векторами. Ниже вариант изменения скорости в зависимости от растояния клика от "registration point" клипа. Следует только добавить проверку на столкновение. Если скорость при столкновении менятся не должна - просто использовать знак дельтаХ или У
Код:

var dX:Number = _x - _root._xmouse;
var dY:Number = _y - _root._ymouse;

xSpeed += dX;
ySpeed += dY;

Естественно, решение с углами универсально, но очень часто - это лишнее усложнение.

Король 15.02.2006 12:11

решение с векторами гораздо более универсально на самом деле

Kyber Anton 15.02.2006 16:37

Да нифига подобного.
с углами - стандартное решение физической задачи(нахождение проекций скоростей), а с векторами - изврат.

Король 15.02.2006 21:25

Kyber Anton, в чем изврат?
векторные вычисления позволяют сделать намного больше (там, где дело касается движений и столкновений), чем рассчеты углов, почитай учебник по физике

__i 15.02.2006 21:34

Цитата:

Сообщение от Король
векторные вычисления позволяют сделать намного больше (там, где дело касается движений и столкновений), чем рассчеты углов, почитай учебник по физике

Разжую подробнее:

в первом случае ты
1 ищешь угол
2 рассчитываешь значение
3 раскладываешь получившееся значение на 2 оси (2х мерное пространство)
4 применяешь получившиеся значения для каждой оси.

Во втором

1 рассчитываешь значение сразу для каждой оси.
2 Применяешь это для каждой оси осей.

Второй способ где-то в 1.5 - 2 раза быстрее %)). Правда 1 й спосоп позволяет свободно поворачивать координаты, но это редко когда приходиться делать%))

Король 15.02.2006 21:52

__i, ты это мне разжевываешь?

__i 16.02.2006 01:29

обижаешь %))
естественно окружающим не понявшим тебя %))

Music'ant 16.02.2006 03:56

Спасибо товарисчи! Этой ниформации больше, чем достаточно. Буду пробовать.


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

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