Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Повернуть объект Nое число раз (http://www.flasher.ru/forum/showthread.php?t=132191)

Gaen 07.11.2009 19:27

У меня офигенная идея: перегрузите свойство 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


me2 09.11.2009 18:40

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

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

SamFR 09.11.2009 21:50

Тогда
Цитата:

Сообщение от SamFR (Сообщение 863909)
Можно (и даже лучше) взять не такую формулу, а что-то типа вашОбъект.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). Далее вращаем.


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

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