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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.11.2009, 19:27
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 11  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

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

Код AS3:
public override function get rotation():Number{
    return this._rotation;
}//get rotation
 
public override function set rotation(angle:Number):void{
 
    //запоминаем большой угол
    this._rotation = angle;
 
    //поворачиваем мувик
    super.rotation = angle;
 
}//set rotation
__________________
тонкий тролль, осеянный благодатью

Старый 09.11.2009, 18:40
me2 вне форума Посмотреть профиль Отправить личное сообщение для me2 Найти все сообщения от me2
  № 12  
Ответить с цитированием
me2

Регистрация: Jan 2008
Сообщений: 84
Где то я видимо объясняю криво.
Смотрим пример, который я вам приводил. Задаём N, исходя из того, сколько витков пользователь совершил
[/quote]
Ведь в этом и проблема =) Зная N, можно устанавливать угол например так: currentAngle+2Pi*n и не нужны эти сложности с таймерами и прочим.
Вычислить максимально точно N у меня не получается (стоит очень быстро покрутить мышкой и все слетает) отсюда погрешности и прочее.

Перегружать rotation как то не охота =) он не виноват, ему смело можно указать rotation=720

Старый 09.11.2009, 21:50
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 13  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Тогда
Цитата:
Сообщение от SamFR Посмотреть сообщение
Можно (и даже лучше) взять не такую формулу, а что-то типа вашОбъект.rotation = angle0 + (angle1 – angle0)*t/T, где angle0 – начальный угол поворота в радианах, angle1 – конечный угол поворота в радианах, t = getTimer() – t0 задаёт текущее время.
Или проблема в том, как узнать, сколько раз нужно прокрутить объект между angle0 и angle1 (если принять, что оба угла лежат между 0 и 2*PI)? Здесь однозначного решения нет.

Можно смотреть, сколько раз object.rotation перешёл значения PI/2 и -PI/2, и в какой последовательности. И на основе этого предполагать, сколько было сделано полных оборотов.

Либо изначально количество оборотов задавать не вращением объекта, а, например, перетягиванием ползунка (вводом числа). Тут уж всё зависит от специфики.

Но, как мне кажется, общая схема, если не получается точно определить количество оборотов, такова: узнали angle0 (object.rotation перед началом вращения объекта пользователем) и angle1 (object.rotation в конце вращения объекта пользователем), а также [N], то есть количество полных оборотов. Далее к angle0 и angle1 прибавили (вычли) период (то есть 2*PI) столько раз, чтобы оба угла лежали на полуотрезке [0; 2*PI). Далее к angle1 прибавали количество полных оборотов, умноженное на 2*PI (то есть angle1 += [N]*2*PI). Далее вращаем.


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

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

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


 


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


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