Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Дополнительное усилие при ускорении (http://www.flasher.ru/forum/showthread.php?t=94294)

ambuddy 09.04.2007 17:43

Дополнительное усилие при ускорении
 
Добрый день, флэшеры.

Я тут делаю такую штуку. Суть в том, что когда проводишь мышью по области вокруг крестика, он вращается. И чем бьыстрее проводишь, тем быстрее он вращается. Проблема в том, что скорость вращения напрямую зависит от скорости движения указателя, но я бы хотел сделать начальную скорость вращения креста быстрее раза в два-три, чем движение мыши. Простое умножение на определенную величину(rotMultiply) дает очень странный эффект "запаздывания" или вообще не влияет на скорость вращения. Без умножения все работает нормлаьно, но скрость мала.
Вот ссылка на мувик нормальный: www.ambuddy.net/use/cross_normal.swf
Вот ссылка на мувик паранормальный: www.ambuddy.net/use/cross_paranormal.swf

Вот код:
Код:

// Дополнительное усилие
rotMultiply = 5;
// Скорость затухания
rotDecay = 0.95;
// Указатель в зоне воздействия
//isOver = false;

mouseX1 = _xmouse;

// Вращаем крестик
aCross.onEnterFrame = rotateFunc;

// Если мышь задела область влияния запускаем поворот, т.е. начинаем считать поворот
aCross.onMouseMove = ifInvolved;


// ======================
// Functions
// ======================
function ifInvolved() {
        if(isOver==false && _xmouse > this._x-50  && _xmouse < this._x+50 && _ymouse > this._y-50  && _ymouse < this._y+50) {
                                       
                mouseOffset = mouseX1 - _xmouse; // считаем относительно пред. значения
                mouseX1 = _xmouse;  // запоминаем предыдущее значение               
               
                rotOffset = mouseOffset;

                rotOffset = rotOffset*rotMultiply;       

        }
}

function rotateFunc() {       
        rotOffset = rotOffset * rotDecay;
        this._rotation += rotOffset;
       
        // Если угол поворота уже слишком мал, останавливаем
        if(Math.abs(rotOffset)<=1) {
                rotOffset = 0;               
                this._rotation = Math.ceil(this._rotation);
               
                // Если крест не встал прямо, докручиваем его
                rAngle = Math.abs(this._rotation);
                if(rAngle > 360) rAngle = rAngle - Math.floor(rAngle/360)*360; // убираем целое число оборотов
                if(rAngle != 0 && rAngle != 90 && rAngle != 180 && rAngle != 270 && rAngle != 360) {
                        this._rotation = (mouseOffset>0) ? this._rotation+1 : this._rotation-1; // вперед или назад
                }               
        }

}


vapes 09.04.2007 17:54

А здаешь почему кажется, будто колеса у машины движутся назд, когда она быстро едет?

ambuddy 09.04.2007 19:47

нууу, очень часто замечал, но физику этого обмана не знаю...
Т.е. хочешь сказать, крест все-таки крутится быстрее и при этом так как надо, просто я этого не замечаю?

etc 09.04.2007 20:21

Цитата:

Сообщение от ambuddy
нууу, очень часто замечал, но физику этого обмана не знаю...

В школе рассказывали.

iNils 09.04.2007 20:53

Цитата:

Сообщение от ambuddy
нууу, очень часто замечал, но физику этого обмана не знаю...
Т.е. хочешь сказать, крест все-таки крутится быстрее и при этом так как надо, просто я этого не замечаю?

Визуально будет казаться, что объект крутится в противоположную сторону относительно направления вращения, когда модуль угла поворота за единицу времени больше 180 градусов и меньше 360. Это для дискретного угла поворота (например во флеше). В жизни происходит тоже самое, хотя поворот и "аналоговый", наш мозг воспринимает все с конечной скорость и поэтому мы видим опять же все дискретно.

techno 09.04.2007 20:57

Цитата:

Сообщение от iNils
Визуально будет казаться, что объект крутится в противоположную сторону относительно направления вращения, когда модуль угла поворота за единицу времени больше 180 градусов и меньше 360.

Это если в крестике одна палочка:taunt:
а так то их четыре, так что 45-90 градусов

iNils 09.04.2007 21:03

Цитата:

Сообщение от techno
Это если в крестике одна палочка:taunt:
а так то их четыре, так что 45-90 градусов

Давайте перечислим все варианты от 1 до бесконечности.

ambuddy 09.04.2007 21:49

Хорошо.

Но почему, когда двигаешь мышкой медленно, то скорость вращения и в первом и во втором случае почти одинакова, хотя должна разниться в пять раз??!!

techno 09.04.2007 21:55

лично я бы сделал так:
Код:

rotOffset = Math.max(mouseOffset,rotOffset);
Если есть сомнения протестируй - поставь 50, например, по-моему все в порядке.

vapes 10.04.2007 16:31

еще совет нарисуй что-нибудь не со спицами, или неповторяющиеся предметы , и посмотри


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

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