Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.04.2011, 20:24
asphodel вне форума Посмотреть профиль Отправить личное сообщение для asphodel Найти все сообщения от asphodel
  № 1  
Ответить с цитированием
asphodel

Регистрация: Apr 2011
Сообщений: 7
Smile И опять рулетка

Возник довольно предстазуемый вопрос - как остановить шарик на нужной ячейке) Мне известны координаты нужной ячейки, мне известны координаты шарика. То есть надо спланировать траекторию движения шарика...
Шарик движется по овалу:
Код AS3:
ball.x = center.x + Math.cos(angle) * bigRadius;
ball.y = center.y + Math.sin(angle) * smallRadius;
Пока идея следующая:
В определенній момент определить и запомнить положение ячейки и просчитать, через сколько кадров она будет в єтой точке снова...И на основе этого времени (количества кадров) расчитать траекторию. Но вот с этим уже проблема...Я думал сводить движение к движению по спирали....но тогда нужно, чтоб шарик через нужное время был в нужной точке - то есть необходимо уменьшать радиусы овала и изменять угол - скорость...в итоге после долгих мучений ничего не вышло...
Может кто-то сталкивался с такой проблемой и есть решение оптимальней...помогите плиз.

Старый 25.04.2011, 22:08
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 2  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Тут все идет от угла.

Дано:
- шарик находится в точке (ballX, ballY)
- шарик обладает начальной угловой скоростью w и двигается с замедлением
- шарик должен сделать n полных оборотов и остановиться в точке с координатами (cellX, cellY) через t сек

Найти:
- угловой путь, пройденный шариком

Зачем:
- чтобы проанимировать шарик простым твином

Решение:
1. Переводим координаты шарика и ячейки в угловые положения при помощи Math.atan2.
2. Искомый путь будет n*(2*Math.PI)*Math.abs(cellAngle - ballAngle)

Теперь как это анимировать. Твин по сути занимается тем, что изменяет заданный параметр с начального значения на конечное в течение заданного промежутка времени по заданному закону. При помощи стандартного твина, изменение свойства angle с плавным замедлением будет выглядеть так:
Код AS3:
this.ballTween = new Tween(this.ball, "angle", Regular.easeOut, currentAngle, finalAngle, t, true);
Чтобы это имело смысл, шарик должен иметь сеттер angle, который будет выставлять его в нужные координаты:
Код AS3:
public function set angle(value:Number):void{
    this._angle = value;
    this.x = center.x + Math.cos(value) * bigRadius;
    this.y = center.y + Math.sin(value) * smallRadius;
}//set angle
__________________
тонкий тролль, осеянный благодатью


Последний раз редактировалось Gaen; 28.04.2011 в 01:14.
Старый 26.04.2011, 17:54
asphodel вне форума Посмотреть профиль Отправить личное сообщение для asphodel Найти все сообщения от asphodel
  № 3  
Ответить с цитированием
asphodel

Регистрация: Apr 2011
Сообщений: 7
Спасибо большое...
Единственное, что непонятно - это перевод координат шарика и ячейки в угловые положения...Это делать с помощью Math.atan2 или как-то по другому?
Также проблемой является то, что ячейка не находится на эллипсе, по которому движется шарик.

Старый 28.04.2011, 02:11
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 4  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Цитата:
Единственное, что непонятно - это перевод координат шарика и ячейки в угловые положения...Это делать с помощью Math.atan2 или как-то по другому?
Да, это делается при помощи Math.atan2, а насчет asin и acos это я погнал... У этой функции есть одна малозаметная особенность, из-за которой я долго пытался понять, что же курил ее автор, выбирая направления осей. Но после очередного прочтения документации я понял, что автор курил не во время выбора осей, с которыми на самом деле все в порядке, а во время определения порядка параметров. Первым параметром передается Y, а вторым - X.
Вторая особенность вполне логична и очевидна: ось y направлена вниз, так как мы имеем дело с экранными координатами.

Цитата:
Также проблемой является то, что ячейка не находится на эллипсе, по которому движется шарик.
Координаты ячейки переведутся в угловое положение для шарика, которое переведется в точку, лежащую на эллипсе.
__________________
тонкий тролль, осеянный благодатью

Старый 28.04.2011, 20:11
Nemez вне форума Посмотреть профиль Отправить личное сообщение для Nemez Найти все сообщения от Nemez
  № 5  
Ответить с цитированием
Nemez
 
Аватар для Nemez

Регистрация: Jun 2010
Сообщений: 189
По-моему, угловая скорость при движении по эллипсу не является постоянной при равномерном движении шарика.

Старый 28.04.2011, 21:46
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 6  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Угловая скорость тут не нужна вовсе, просто изначально я думал использовать ее для вычисления количества оборотов, которое обеспечит плавную остановку, но для этого потребуется дополнительный параметр - максимальное ускорение (замедление), при котором остановка выглядит плавной. В данном случае проще не запариваться, и подобрать количество оборотов эксприментально.
__________________
тонкий тролль, осеянный благодатью

Старый 23.07.2011, 19:23
greenhill вне форума Посмотреть профиль Отправить личное сообщение для greenhill Посетить домашнюю страницу greenhill Найти все сообщения от greenhill
  № 7  
Ответить с цитированием
greenhill
 
Аватар для greenhill

Регистрация: Mar 2009
Сообщений: 281
Отправить сообщение для greenhill с помощью ICQ
Расскажите пожалуйста детальнее как с помощью Tween можно двигать объект по эллипсу
__________________
http://zenpro.blogspot.com/

Старый 24.07.2011, 15:44
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 8  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
ЧТобы не открывать новую тему, тоже тут спрошу.
Дано. Рулетка вид сверху, рулетка (круг ) поделена на секторы соотв числам.
Нужно : если пришел результат, например 10, прокрутить рулетку раза 3 -4 в конце с замедлением, и остановится на нужном числе, так чтобы это число было наверху в центре. Это аналогия с циферблатом часов, крутится часовая стрелка 4 раза, вместе с ней крутятся и все часы - итог если выпало число 5, нужно чтобы 5 была в районе 12, где 12 стояло изначально.
__________________
Марк Tween

Старый 25.07.2011, 02:00
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 9  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вычисли угол, на который надо повернуть круг, чтобы нужный сектор оказался в нужном месте. Добавь 3-4 раза по 360° и запускай твин на rotation, с ускорением вначале и замедлением в конце. Если подходящего алгоритма твина нет, подели на три части – круг на твин-разгон, два круга на постоянной скорости и круг + остаток на твин-замедление.
__________________
Reality.getBounds(this);

Старый 26.07.2011, 21:52
greenhill вне форума Посмотреть профиль Отправить личное сообщение для greenhill Посетить домашнюю страницу greenhill Найти все сообщения от greenhill
  № 10  
Ответить с цитированием
greenhill
 
Аватар для greenhill

Регистрация: Mar 2009
Сообщений: 281
Отправить сообщение для greenhill с помощью ICQ
Gaen,
Цитата:
public function set angle(value:Number):void{
this._angle = value;
this.x = center.x + Math.cos(value) * bigRadius;
this.y = center.y + Math.sin(value) * smallRadius;
}//set angle
а где этот сеттер вызывается?
и как вы делаете "прыжок" по ячейкам?
__________________
http://zenpro.blogspot.com/

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:25.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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