Форум 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=119665)

dima_kiv 26.12.2008 18:46

Как програмно сделать движение плавным?
 
Вложений: 1
смотрите исходник. надо чтоб блоки перемещались с эффектом замедления. не могу придумать как... спасибо.

artem_fs 26.12.2008 19:20

Код AS1/AS2:

right.onRollOver = function() {
        if (clip._x <> -1484) {
                newX=clip._x-742;
                updatePos(newX);
        }
}
left.onRollOver = function() {
        if (clip._x <> 0) {
                newX=clip._x+742;
                updatePos(newX);
        }
}
 
function updatePos(newX){
          clip.onEnterFrame = function() {
                        X=clip._x;
                        clip._x = X+(newX-X)*0.8;
                        if (clip._x == newX){
                                delete clip.onEnterFrame;
                        }
    };
}

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

flash_image 26.12.2008 19:36

а почему не использовать твин ??

artem_fs 26.12.2008 19:41

flash_image, а если у вас 100+ кадров? и надо их менять внешне?

dima_kiv 26.12.2008 19:55

artem_fs спасибо... только вот условие мое теперь не работает, что если блок первый или последний событие переставало срабатывать...

artem_fs 26.12.2008 19:58

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

dima_kiv 26.12.2008 22:08

artem_fs честно говоря с трудом понял о чем ты...) если долго объяснять может есть какое то стандартное решение данной задачи?

artem_fs 26.12.2008 23:41

Код AS1/AS2:

frames = 2; //количество кадров -1
frameOn = 0; //текущий кадр -1
 
right.onRollOver = function() {
        if(frameOn<frames){frameOn++;}
        newX = -742*frameOn;
        updatePos(newX);
}
 
left.onRollOver = function() {
        if(frameOn>0){frameOn--;}
        newX = -742*frameOn;
        updatePos(newX);
}
 
function updatePos(newX){
        clip.onEnterFrame = function() {
                X=clip._x;
                clip._x = X+(newX-X)*0.6;
                if (clip._x == newX){
                        delete clip.onEnterFrame;
                }
        };
}

под пиво есть решение.

dima_kiv 29.12.2008 11:34

artem_fs спасибо большое!


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

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