PDA

Просмотр полной версии : Как сделать эффект дрожания?


SLY_G
17.12.2002, 18:31
Хочется сделать эффект "дрожания" мувика, когда мышка над ним оказывается.

Пишу следующий код:

on (rollOver) {
init_x=Myvik._x;
init_y=Myvik._y;
for (i=0; $i<10; $i++) {
Movyk._x=random(10)-5;
Movyk._y=random(10)-5;
}
Myvik._x=init_x;
Myvik._y=init_y;
}

Работает, но не так, как я хотел - дрожания не видно. Flash просто просчитывает все перемещения и выдаёт на экран конечное положение мувика.
А я хотел, чтоб дрожание было видно.
Видимо, надо вставить в цикл for () {} еще две функции:

обновитьСодержимоеЭкрана();
задержкаМиллиСекунд(100);

Есть ли такие? Или это как-то по другому делается?

antree
18.12.2002, 14:02
ты лучше не кнопкой сделай, а мувиклипом. А весь свой код закинь внутрь хэндлеров onClipEvent (enterFrame) {}. А кнопку запихни внутрь самого мувика.

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

и выкинь нахрен циклы - мувик с одним кадром и так в цикле вертится.

onclipevent (enterframe) {
_x=10*Math.random()+стартовая позиция по х
_y=10*Math.random()+стартовая позиция по y
}

вот и все. синтаксис кривой, но принцип должен быть ясен.

SLY_G
18.12.2002, 14:16
А мне и нужно, чтобы мувик дрожал только кода на него мышкой наводят. Навели мышку на него - он вздрогнул. Ещё раз навели - ещё раз вздрогнул Ж)
Сорри, если непонятно объяснил.

LostWarrior
18.12.2002, 14:57
Тогда нужен счетчик кадров дрожания

onRollOut
----
flag=5;
----

onRollOver
----
if (flag>0){
flag--;
_x=10*Math.random()+стартовая позиция по х
_y=10*Math.random()+стартовая позиция по y
}
----

antree
18.12.2002, 14:59
если дрожание короткое - имхо проще (и разумнее с точки зрения ресурсов) сделать простейшую покадровую анимашку фреймов так на 5.

antree
18.12.2002, 15:02
если особо красивый изврат нужен - можно приплести эластику, но это уже ресурсы будет подгрызать...

SLY_G
18.12.2002, 15:25
Ну да, можно нечто вроде такого сделать:


myclip.stop();
myclip.onRollOver = function() {
myclip.play();
};
myclip.onRollOut = function() {
myclip.stop();
};


Поместить это на главную timeline, а сам myclip сделать анимацией дрожания.

Кстати, можно этот код сделать как-то покороче? В смысле, чтоб не писать каждый раз myclip.что-то-там

LostWarrior
18.12.2002, 15:43
Внутри функций можеш уже не писать.
Но он будет дрожать все время пока мышка сверху...
Или нужно в последний кадр еще stop() написать

Alexey (G-fi)
19.12.2002, 18:28
...„r„Ђ„„, „Ѓ„Ђ„Ѓ„‚„Ђ„q„…„z...

„D„|„‘ „Ѓ„‚„p„r„y„|„Ћ„~„Ђ„ѓ„„„y, „Ѓ„Ђ„ѓ„„„p„r„Ћ „Ѓ„‚„Ђ„r„u„‚„{„y, „‰„„„Ђ„q„Ќ ѓФ „y y „~„u „r„Ќ„‡„Ђ„t„y„| „x„p „x„p„t„p„~„~„Ќ„u „‚„p„x„}„u„‚„Ќ... :)

SLY_G
19.12.2002, 18:31
Оригинал написал(а) Alexey (G-fi)
...„r„Ђ„„, „Ѓ„Ђ„Ѓ„‚„Ђ„q„…„z...

„D„|„‘ „Ѓ„‚„p„r„y„|„Ћ„~„Ђ„ѓ„„„y, „Ѓ„Ђ„ѓ„„„p„r„Ћ „Ѓ„‚„Ђ„r„u„‚„{„y, „‰„„„Ђ„q„Ќ ѓФ „y y „~„u „r„Ќ„‡„Ђ„t„y„| „x„p „x„p„t„p„~„~„Ќ„u „‚„p„x„}„u„‚„Ќ... :)

Кодировка только арабская, а так всё хорошо Ж)

И какой-то там iframe с левым сайтом вместо файлы. Это не есть гуд Ж(

LostWarrior
19.12.2002, 19:04
на самом деле там пустой файл запакован.

Sasha L
20.12.2002, 18:58
У тебя все правильно, за тем что надо добавить кадры.
В первом твой скриптик. Во втором, третьем и т.д. отображается положение. В n-ом кадре возвращаемся на первый и вновь просчитываем новое положение. И т.д. Число кадров и есть твоя задердка. Думаю одного, другого хватит.

Pietrovich
20.12.2002, 23:44
на МХ
[сразу скажу что криво напишу, главное - идея]

a.onRollOver = function ()
{
_xx = _x;
_yy = _y;
onEnterFrame = function ()
{
//for (i=1; i<3; i++) //это если нужно поболе чем один вздрог за кадр
//{
_x=_xx+random(10); //random - deprecated , но так удобнее
_y=_yy+random(10);
//}
}
}

a.onRollOut = function ()
{
_x=_xx;
_y=_yy;
onEnterFrame = function ()
{
return false;
}
}

Pietrovich
20.12.2002, 23:51
Оригинал написал(а) Pietrovich
на МХ
[сразу скажу что криво напишу, главное - идея]

a.onRollOver = function ()
{
_xx = _x;
_yy = _y;
_max = 20;
rdCount=0;
onEnterFrame = function ()
{
if (drCount>_max) //это если дрожжать не до тех пор пока мышак уберут
{
_x=_xx; _y=_yy;
onEnterFrame = function () { return false; }
return false
}
//for (i=1; i<3; i++) //это если нужно поболе чем один вздрог за кадр
//{

_x=_xx+random(10); //random - deprecated , но так удобнее
_y=_yy+random(10);
drCount++
//}
}
}

a.onRollOut = function ()
{
_x=_xx;
_y=_yy;
onEnterFrame = function ()
{
return false;
}
}

Pietrovich
20.12.2002, 23:52
блин, сорри, клацнул на цитату а не на изменить :(