![]() |
Вращение объекта вне зависимости от положения курсора относительно него
Здравствуйте. Существует код вращения объекта вокруг своей оси вслед за курсором:
Код AS3:
|
Вероятно что функция-обработчик событий мыши подписана на сам объект, а должна быть подписана например на stage
|
А по-моему все нормально подписано. Если я правильно понял, автору нужно вращать курсором где-то вообще в стороне от объекта, и чтобы объект при этом так же крутился. Т.е. не смотрел постоянно на курсор, а просто повторял его движения.
Первое что приходит в голову, покадрово записывать положения мыши, сравнивать предыдущее положение с текущим, и по этим параметрам определять направление вращения. А по разнице величин определять скорость вращения. |
Попробуйте так
Код AS3:
|
Storfus13, Спасибо, работает, правда очень дёргано, если курсор двигать медленно, даже со "сглаживанием", попробую использовать твины.
|
Так постабильнее (вычисляет направление вращения по 3-м точкам):
Код AS3:
|
Работает, но тоже как-то странно (то очень резко, то медленно). Вообще основная идея - сделать окно принятия решения как в игре Mass Effect:
http://www.cravingtech.com/blog/wp-c.../2008/06/2.jpg Там курсор вращается очень плавно. Есть идеи как это сделано? |
Описывая анимацию давать ссылку на статическую картинку - это 5 баллов. Я понимаю, конечно, что 50% населения обязано было в нее играть, но от этого проще не становится.
|
Виноват, объясняю принцип работы:
В центре снизу расположено колесо состоящее из 6-ти сегментов, в его центре - курсор, при совершении вращательных движений мышью он вращается от сегмента к сегменту относительно центра колеса, по часовой или против часовой стрелки, в зависимости от движения мыши. Вращается плавно, без рывков. Начиная с некоторого небольшого радиуса (около 30 пикселов), скорость вращения не зависит от размера описываемых мышью кругов, один круг мышью - один полный поворот курсора на 360*. Если же описываемый круг имеет радиус меньше 30 пикселов, то вращение практически не происходит. Тот сегмент, на который направлен курсор - подсвечивается, так-же как и соответствующая сегменту надпись (вариант ответа). При клике левой кнопкой происходит выполнение действия назначенного на подсвеченный вариант, и диалог пропадает. Вроде всё Еще одна версия диалога: http://gamepart.ru/sites/default/fil...ect-325695.jpg |
Тоже возникла сейчас такая задача.
Приведенные выше методы, работают не так, как хочется. |
Почему бы не подписать сцену на событие MouseDown а затем, по сему событию сохранять координаты точки, и относительно этой точки считать угол?
|
Цитата:
|
Цитата:
|
Думаю, что бы перестать крутить надо просто кликнуть, в любом месте экрана , и текущий выбор запомнится, вращение остановится.
|
По поводу масс эффекта думаю надо создавать виртуальный центр, вокруг которого считать поворот.
Играл давно и не помню, как там активизируется слежение за мышью — сразу при появлении меню, или надо нажать мышь и вращать, а потом отпустить когда подсветится на нужном пункте... Не важно, есть момент когда начинается слежение за движением мыши. В этот момент на круговом меню какой-то пункт "выбран", то есть "курсор меню" находится на каком-то секторе окружности. Создаем виртуальное представление окружности для мышки, то есть определяем центр окружности так, чтобы положение мыши "сейчас" было в том же секторе этой виртуальной окружности, что и "курсор меню" в реальной окружности. И далее вычисляем угол при движении мыши относительно этого виртуального центра. Ну а плавность я думаю твинами можно обеспечить. |
Да, как вариант строить окружность по 3 последним точкам и проверять относительно её центра, в какую сторону пользователь вращает курсор. Попробую и отпишусь о результатах.
Добавлено через 9 часов 48 минут Сделал так: Есть массив(очередь) из 3 точек(координаты курсора), через определенное время(например 100 мс), выбрасываем первую точку и добавляем последнюю(текущие координаты курсора). Еще храним предыдущую позицию курсора, записывается на каждом шаге. Теперь рассчитываем центр окружности по таким точкам: 1) точка с индексом 0 в массиве координат, 2) предыдущая позиция курсора, 3) текущая позиция. Находим угол поворота между предыдущей позицией курсора и текущей относительно центра окружности. Этот угол и будет коэффициентом поворота. Можно попробовать рассчитывать этот коэффициент как расстояние между пред. и текущей координатами курсора. Можно еще попробовать строить окружность по другим точкам, покрутить время удаления/добавления точек и т.д. |
| Часовой пояс GMT +4, время: 18:30. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.