PDA

Просмотр полной версии : программная анимация


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
«xx» неизвестная размерность – поэтому Action и стопорит Vx.
Это жестко - сунуть лом в колесо и решить что машина остановилась. При этом мотор продолжает работать.

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

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

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

Kikasso
27.06.2007, 12:01
вы имеете ввиду с новой строчки после вышеизложенного кода (на первом кадре) прописать:_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/russian/style3/buttons/edit.gif, поэтому не надо создавать несколько сообщений подряд, надо исправить последнее в теме.