Просмотр полной версии : Как сделать равномерное прямолинейное движение на ActionScripte?
Terranston
16.06.2003, 21:34
;) Надо сделать прямолинейное движение. В исходниках я не догнал... помогите... :rolleyes:
Чего конкретно те нужно? Например мона так:
onClipEvent (enterFrame) {
_x++;
}
Просто ,в первом фрейме для мувика... :)
Пушистик
16.06.2003, 23:24
Просто ,в первом фрейме для мувика...
поправочка....:)
ну не в первом кадре.....а на самом мувике нужно щелкнуть и вставить код:)
Конечно же!!!
Пушистику пасиб.... :)
Пушистик, как кстати, мона придать скорости объекту при таком (скриптовом. смотри выше ) способе движения?
Пушистик
17.06.2003, 10:41
воть так:
onClipEvent (load) {
speed = 10;
}
onClipEvent (enterFrame) {
_x+=speed;
}
cyraxchel
29.07.2003, 10:30
2Пушистик:
А если например есть какой-либо объект. Его положение устанавливается случайным образом. И нужно, чтобы задавалось случайное направление, после чего объект двигался бы по этому направлению до границы сцены. Как такое примерно сделать?
Пушистик
29.07.2003, 10:46
onClipEvent (load) {
speed = random(10)-5;
}
onClipEvent (enterFrame) {
_x+=speed;
if (this._x<=0||this._x>=Stage.width) {
speed = 0;
}
}
cyraxchel
29.07.2003, 11:00
Не, Пушистик, ты меня маленько не поням. Дело в том, что направление задается случайно по Х и по Y.
Короче - косяк в том, что надо сделать случайное направление на 360 градусов. Вот.
Скорость шарика не имеет значения.
cyraxchel
29.07.2003, 11:07
И еще маленькое дополнение - как делать отскок от края сцены (зеркальный)?
Пушистик
29.07.2003, 11:16
хехе....может те отскоки нужны?
смореть лучше не в дебугере:)
если не то, скажи...
cyraxchel
29.07.2003, 11:24
Во!!! То, что нужно! Бааашое СПАСИБО! Выручил.
cyraxchel
29.07.2003, 12:27
Хотя... конечно есть косяки. Вот например такая фишка = я дублирую мувик с шариком... например 10 раз. Можно ли обеспечить hitTest между шариками? чтобы они отскакивали друг от друга?
Дублирование идет таким образом:
duplicateMovieClip("bot","bot"+i,i);
Пушистик
29.07.2003, 16:38
можно....подажи.....я сделаю....
cyraxchel
29.07.2003, 17:34
Ок, без проблем. =)
ЗЫ: В догонку - решил форум открыть?
Пушистик
29.07.2003, 19:52
млин! посмори пока так....доделаю потом...
cyraxchel
30.07.2003, 09:38
2Пушистик. У тебя вышел тот же трабл, что и у меня. При хитТесте каждый отдельный шарик не исключает своего имени. Поэтому их начинает дергать по y в твоем случае и по x и y в моем. :( Я пытался имя исключить. Но делал через eval. Что-то не пошло. Сегодня попробую сделать через _root["bot"+t].
Спасибо, что уделил время.
cyraxchel
30.07.2003, 09:48
Блин. И так тоже не хочет работать. Все-равно их плющит.
Пушистик
30.07.2003, 14:14
буим разбараться! чё нить придумаем, не боись!:)
Supnabor
30.07.2003, 20:47
cyraxchel:
Vse u tebya normal'no tol'ko oshibochka zakralas'
posmotri kak ty proveryaesh -
if (this.hitTest(_root["bot"+t]) && this._name != _root["bot"+1])
{
speedy = -speedy;
}
a nado:
if (this.hitTest(_root["bot"+t]) && this._name != _root["bot"+t]._name)
{
speedy = -speedy;
}
Teper' vse rabotaet :)
sergwizard
30.07.2003, 22:35
А если попробовать такой вариант:
Создаем MC - окружность радиусом 20, линкуем его в библиотеке под именем "ball".
В первый (и единственный) фрейм вписываем следующий код:
bx = [];
by = [];
n = 5;
for (a=1; a<=n; a++) {
bx[a] = 0;
by[a] = 0;
_root.attachMovie( "ball","ball"+a, a);
_root["ball"+a]._x = random(300);
_root["ball"+a]._y = random(300);
}
bx[1] = (ball2._x-ball1._x+random(5))/20;
by[1] = (ball2._y-ball1._y+random(5))/20;
function calc_reflection (aa, bb) {
x1 = bx[aa];
y1 = by[aa];
x2 = bx[bb];
y2 = by[bb];
x3 = _root["ball"+aa]._x-_root["ball"+bb]._x;
y3 = _root["ball"+aa]._y-_root["ball"+bb]._y;
s = 1/(x3*x3+y3*y3);
a = (x1*x3+y1*y3)*s;
x4 = x3*a;
y4 = y3*a;
x1 = x1-x4;
y1 = y1-y4;
a = (x2*x3+y2*y3)*s;
x5 = x3*a;
y5 = y3*a;
x2 = x2-x5;
y2 = y2-y5;
bx[aa] = x1+x5;
by[aa] = y1+y5;
bx[bb] = x2+x4;
by[bb] = y2+y4;
}
function calc_collision (aa, bb) {
x1 = _root["ball"+aa]._x;
y1 = _root["ball"+aa]._y;
x2 = x1+bx[aa];
y2 = y1+by[aa];
x3 = _root["ball"+bb]._x;
y3 = _root["ball"+bb]._y;
r = 20;
i = bx[aa];
j = by[aa];
k = x1-x3;
l = y1-y3;
a = i*i+j*j;
if (a == 0) {
return 1;
}
b = 2*(i*k+j*l);
c = k*k+l*l-r*r;
d = b*b-4*a*c;
if (d<0) {
return 1;
}
t = (-b-Math.sqrt(d))*0.5/a;
if ((t<0) || (t>1)) {
return 1;
}
x4 = i*t+x1;
y4 = j*t+y1;
_root["ball"+aa]._x = x4;
_root["ball"+aa]._y = y4;
calc_reflection(aa, bb);
return 0;
}
this.onEnterFrame = function(){
f = 0;
for (aa=1; aa<=n; aa++) {
for (bb=1; bb<=n; bb++) {
if (bb != aa) {
if (calc_collision(aa, bb)==0) {
f = 1;
}
}
}
if (f==0) {
x = Math.floor(_root["ball"+aa]._x);
y = Math.floor(_root["ball"+aa]._y);
if (x<10 or x>=390) {
bx[aa] = -bx[aa];
}
if (y<=10 or y>=390) {
by[aa] = -by[aa];
}
_root["ball"+aa]._x += bx[aa];
_root["ball"+aa]._y += by[aa];
}
}
}
Проверяем.
Хреново только, что чем больше шаров, тем тяжелее движение. Или это только на моем стареньком 386-м компутере?
Да, это все для мувика с размерами 400Х400.
Пушистик
30.07.2003, 23:12
крута!ну тада можно просто взять такие шарики раздела исходники!:)
cyraxchel
31.07.2003, 08:29
2Supnabor:
Спасибо, что подметил ошибку. А то бы вааще забил бы на этот хитТест.
2sergwizard:
Твой вариант обязательно попробую. Только позже. Торопят сильно. А в коде надо разобраться. =) Да и шаров порядка 20 штук. И помимо этого еще дополнительная анимация с уменьшением клипа, в котором беснуются шары.
Всем СПАСИБО!
cyraxchel
31.07.2003, 09:46
2sergwizard:
Попробовал твой вариант. Классно. Но не для моего случая. У меня показывается хаотичное движение молекул в колбе. Такая вот муть. =)
Кстати, насчет количества шаров - ты прав. У меня тоже притормаживать начинает.
cyraxchel
01.08.2003, 19:57
Люди, поможите, если сможете.
Опять трабл с этим делом. Шарики (молекулы) скачут в некотором прямоугольном объеме. Мне нужно, чтобы после того, как шарики какое-то время поскакали, они высыпались через открывшееся отверстие (оно уже чем дно и находится посередине) внизу объема. И не получается. :mad:
HELP! :(
Если есть возможность удалять onClipEvent(EnterFrame), подскажите, как. Сделаю через него.
Пушистик
02.08.2003, 13:28
cyraxchel, кидай сорс на мыло!
morientes@mail.ru
чё нибудь придумаем:))
cyraxchel
02.08.2003, 13:40
Все, отправил.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.