![]() |
"Примагнищивающийся" к мышке объект
Добрый день, как лучше сделать интерактивный объект с таким поведением: когда курсор мыши начинает приближается к нему, он тоже начинает приближаться к мышке, как бы магнититься, только плавно, отводишь, он возвращается на место.
Я сделал, но, думаю, не очень рационально. В частности, если высчитывать расстояние как гипотенузу от центра объекта до мыши, то для прямоугольных вытянутых объектов это не очень красиво, ты довел мышку до края объекта уже, а расстояние до центра еще большое и объект "не очень активен" )) Подскажите пожалуйста... |
так может лучше назначить область действия не с краю, а небольшой радиус около центра
|
Вложений: 1
ну так и есть вокруг центра радиус, я и говорю, что это плохо...
Вот рисунок вобщем |
-находим некий условный центр объекта через getBounds(stage), например
-шагаем с нужной точностью по отрезку, соединяющему мышь c этим центром, походу проверяя hitTestPoint -если хит найдется на достойном для снапа расстоянии, двигаем |
Алгоритм для движения вот тоже вопрос...
На ENTER_FRAME надо какую-то зависимость провести от чего-то - чем ближе мышка, тем больше сила притяжения. Как это выразить кодом? |
определние снапа ( на ENTER_FRAME, например)
Код AS3:
не спортивно это как-то спрашивать код, не потрудившись даже сформулировать толком, в чем трабл трудно представить, что проблема посчитать расстояние между точками или двинуть объект в нужном направлении, в зависмости от этого расстояния |
А проблему в сущности то нет.
Это просто интерес профессиональный, кто как делает. Что бы не смущать людей, код не дал, дабы не сужать полет фантазии))) Мой вариант реализован на шапке на сайте моем myFlashWorks.ru =) Добавлено через 1 час 27 минут А вот тут уже наткнулся на траблу(( Скорость движения объекта к мышке должна быть обратно пропорцианальна расстоянию между ними. Грубо говоря, так speedX = 1 / (objX - mouseX); Вот когда objX = mouseX, происходит сами понимаете что %\ Как избавиться от нуля в знаменателе или может формулу я неправильную выбрал? |
Марик, введи очевидную проверку на objX == mouseX
|
Макс, а если objX = 0.001, а mouseX = 0? Проверка не сработает, а объект улетит со скоростью 1000 pix/frame...
Округлять тоже не вариант, слишком много потом условий писать, формулу надо другую... |
Код AS3:
|
| Часовой пояс GMT +4, время: 04:29. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.