![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2011
Сообщений: 7
|
Возник довольно предстазуемый вопрос - как остановить шарик на нужной ячейке) Мне известны координаты нужной ячейки, мне известны координаты шарика. То есть надо спланировать траекторию движения шарика...
Шарик движется по овалу: ball.x = center.x + Math.cos(angle) * bigRadius; ball.y = center.y + Math.sin(angle) * smallRadius; В определенній момент определить и запомнить положение ячейки и просчитать, через сколько кадров она будет в єтой точке снова...И на основе этого времени (количества кадров) расчитать траекторию. Но вот с этим уже проблема...Я думал сводить движение к движению по спирали....но тогда нужно, чтоб шарик через нужное время был в нужной точке - то есть необходимо уменьшать радиусы овала и изменять угол - скорость...в итоге после долгих мучений ничего не вышло... Может кто-то сталкивался с такой проблемой и есть решение оптимальней...помогите плиз. |
|
|||||
|
strange mood
|
Тут все идет от угла.
Дано: - шарик находится в точке (ballX, ballY) - шарик обладает начальной угловой скоростью w и двигается с замедлением - шарик должен сделать n полных оборотов и остановиться в точке с координатами (cellX, cellY) через t сек Найти: - угловой путь, пройденный шариком Зачем: - чтобы проанимировать шарик простым твином Решение: 1. Переводим координаты шарика и ячейки в угловые положения при помощи Math.atan2. 2. Искомый путь будет n*(2*Math.PI)*Math.abs(cellAngle - ballAngle) Теперь как это анимировать. Твин по сути занимается тем, что изменяет заданный параметр с начального значения на конечное в течение заданного промежутка времени по заданному закону. При помощи стандартного твина, изменение свойства angle с плавным замедлением будет выглядеть так: this.ballTween = new Tween(this.ball, "angle", Regular.easeOut, currentAngle, finalAngle, t, true);
__________________
тонкий тролль, осеянный благодатью Последний раз редактировалось Gaen; 28.04.2011 в 01:14. |
|
|||||
|
Регистрация: Apr 2011
Сообщений: 7
|
Спасибо большое...
Единственное, что непонятно - это перевод координат шарика и ячейки в угловые положения...Это делать с помощью Math.atan2 или как-то по другому? Также проблемой является то, что ячейка не находится на эллипсе, по которому движется шарик. |
|
|||||
|
strange mood
|
Цитата:
Вторая особенность вполне логична и очевидна: ось y направлена вниз, так как мы имеем дело с экранными координатами. Цитата:
__________________
тонкий тролль, осеянный благодатью |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 189
|
По-моему, угловая скорость при движении по эллипсу не является постоянной при равномерном движении шарика.
|
|
|||||
|
strange mood
|
Угловая скорость тут не нужна вовсе, просто изначально я думал использовать ее для вычисления количества оборотов, которое обеспечит плавную остановку, но для этого потребуется дополнительный параметр - максимальное ускорение (замедление), при котором остановка выглядит плавной. В данном случае проще не запариваться, и подобрать количество оборотов эксприментально.
__________________
тонкий тролль, осеянный благодатью |
|
|||||
|
Расскажите пожалуйста детальнее как с помощью Tween можно двигать объект по эллипсу
__________________
http://zenpro.blogspot.com/ |
|
|||||
|
[+4 06.05.14]
|
ЧТобы не открывать новую тему, тоже тут спрошу.
Дано. Рулетка вид сверху, рулетка (круг ) поделена на секторы соотв числам. Нужно : если пришел результат, например 10, прокрутить рулетку раза 3 -4 в конце с замедлением, и остановится на нужном числе, так чтобы это число было наверху в центре. Это аналогия с циферблатом часов, крутится часовая стрелка 4 раза, вместе с ней крутятся и все часы - итог если выпало число 5, нужно чтобы 5 была в районе 12, где 12 стояло изначально.
__________________
Марк Tween |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Вычисли угол, на который надо повернуть круг, чтобы нужный сектор оказался в нужном месте. Добавь 3-4 раза по 360° и запускай твин на rotation, с ускорением вначале и замедлением в конце. Если подходящего алгоритма твина нет, подели на три части – круг на твин-разгон, два круга на постоянной скорости и круг + остаток на твин-замедление.
__________________
Reality.getBounds(this); |
|
|||||
|
Gaen,
Цитата:
и как вы делаете "прыжок" по ячейкам?
__________________
http://zenpro.blogspot.com/ |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:53. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|