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

Rasamaha 27.06.2007 05:38

программная анимация
 
Господа подскажите, как правильней поступить. На главной временной линейке есть кнопка и рядом с ней объект. Нужно что бы при наведении на кнопку объект немного отодвинулся (по _x),
а при отводе встал на свое место. Я уже задавал вопрос про равноускоренное движение (спасибо всем кто учувствовал), эта вторая часть)). Думаю, все поняли, что кнопка делается программно. На первом кадре я написал код:

Код:

sc1._x = 69.1;
sc1._alpha = 0;
var X0 = 69.1;
var Vx = 0;
var t = 0;
var a = 0;
_root.onEnterFrame = function() {
        sc1._x = X0+Vx*t+a*t*t/2;
        t += 0.4;
        if (sc1._x<55) {
                Vx = xx;
                trace(sc1._x);
        }
};

«xx» неизвестная размерность – поэтому Action и стопорит Vx. Если за место этой строчки прописать delete onEnterFrame получается то же самое (остановка) но в дальнейшем код вообще работать отказывается.
На кнопку вешаю код:
Код:

on (rollOver) {
        sc1._alpha =100;
        X0 = 69.1;
        Vx = -3;
        t = 0;
        a = -3;
}
on (rollOut) {
        X0=53.25;
        Vx=3;
        t=1;
        a=3;       
}

В общем все работает, только при отводе (rollOut) не получается объект остановить. Пробовал на первом кадре в if прописать: if(sc1._x<55||sc1._x>69.1){..и т.д. вообще двигаться перестает:quiet: .

Kikasso 27.06.2007 08:00

Цитата:

Сообщение от Rasamaha
«xx» неизвестная размерность – поэтому Action и стопорит Vx.

Это жестко - сунуть лом в колесо и решить что машина остановилась. При этом мотор продолжает работать.

Выключайте мотор (delete onEnterFrame),
в нужный момент его снова включайте (onEnterFrame = motionFunction )

motionFunction - это то что предстоит вам написать.

Rasamaha 27.06.2007 11:43

Цитата:

Сообщение от Kikasso
Выключайте мотор (delete onEnterFrame),
в нужный момент его снова включайте (onEnterFrame = motionFunction )
motionFunction - это то что предстоит вам написать.

Полностью согласен, что код выходит корявый)) Но вернемся к проблеме. Т.е. вы имеете ввиду с новой строчки после вышеизложенного кода (на первом кадре) прописать:_root.onEnterFrame(){};И уже в фигурных скобках расписывать новое движение? Или прописать как у вас onEnterFrame=…и т.д. Извиняйте если туплю, учусь все таки)

Kikasso 27.06.2007 12:01

Цитата:

Сообщение от Rasamaha
вы имеете ввиду с новой строчки после вышеизложенного кода (на первом кадре) прописать:
Код:

_root.onEnterFrame(){};

Только не так, это бессмыслица.
onEnterFrame - это то, что будет выполняться каждый кадр. Или
Код:

//поехали
onEnterFrame = function(){....}
//остановились
delete onEnterFrame;
//снова поехали
onEnterFrame = function(){....}

Или
Код:

function myMotion(){
// уравнение движения
}
//поехали
onEnterFrame = myMotion; // без скобок
//остановились
delete onEnterFrame; //или onEnterFrame = null;
//снова поехали
onEnterFrame = myMotion;

В принципе, это одно и то же, только в первом случае функция анонимна, и когда вы ее удаляете - она удаляется, и приходится ее повторно писать. А во втором случае функция остается, ее можно повторно использовать.
Удаление и присвоение надо поставить в нужные места в коде.

Rasamaha 27.06.2007 12:10

Спасиб) Сейчас буду разбираться)

Rasamaha 27.06.2007 20:27

А можно из под одного кадра контролировать этот процесс? К примеру через onRollOver=function(){}; т.е. не вешая код на кнопку

неполучется...

iNils 27.06.2007 21:14

Rasamaha, есть кнопка http://www.flasher.ru/forum/images/r...ttons/edit.gif, поэтому не надо создавать несколько сообщений подряд, надо исправить последнее в теме.


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

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