![]() |
|
||||||||||
|
|||||
|
Регистрация: Oct 2002
Сообщений: 22
|
Господа, на прошлое сообщение никто не ответил, поэтому делаю репост. Если вопрос очень ламерский или тупой, то хоть скажите об этом....
Есть 2 объекта s1 и s2. Объект s2 должен двигаться к объекту s1. Пишу примерно следующее: onClipEvent (enterFrame) { dx = _root.s1._x - _root.s2._x dy = _root.s1._y - _root.s2._y if (dx<0) sG1 = 270; else sG1 = 90 rotGR = 180/Math.PI * Math.atan (dy/dx) _root.s2._x+=Math.cos(rotGR); _root.s2._y+=Math.sin(rotGR); _root.s2._rotation = sG1 + rotGR } Все работает, пока s1 статичен. Как только s1 начинает двигаться, s2 начиинает совершать вращательные движения на месте. Никак не могу разобраться почему? Пример *.fla заатачил. |
|
|||||
|
Регистрация: Oct 2002
Сообщений: 22
|
что-то не атачится с первого раза пример
|
|
|||||
|
Регистрация: Jan 2002
Адрес: СПб-Denver-Лермонтов
Сообщений: 1,525
|
Вставь в клип "s2" следующий код:
onClipEvent (load) {
k = 0.002;
decay = 0.96;
}
onClipEvent (enterFrame) {
dx = _root._xmouse-_x;
dy = _root._ymouse-_y;
if (dx>0 && dy>0) {
quad = 4;
}
if (dx<0 && dy>0) {
quad = 1;
}
if (dx<0 && dy<0) {
quad = 2;
}
if (dx>0 && dy<0) {
quad = 3;
}
abs_x = Math.abs(dx);
abs_y = Math.abs(dy);
tg = abs_y/abs_x;
_root.sG1 = Math.atan(tg)*180/Math.PI;
if (quad == 1) {
angle = 90-_root.sG1;
}
if (quad == 2) {
angle = 90+_root.sG1;
}
if (quad == 3) {
angle = 270-_root.sG1;
}
if (quad == 4) {
angle = 270+_root.sG1;
}
_rotation = angle-180;
x = _x;
y = _y;
mx = _root._xmouse;
my = _root._ymouse;
disx = math.abs(x-mx);
disy = math.abs(y-my);
xmov = k*(mx-x)+decay*xmov;
ymov = k*(my-y)+decay*ymov;
_x = xmov+x;
_y = ymov+y;
}
__________________
Для того чтобы узнавать, есть два способа: - задавать вопросы и пытаться самому на них ответить. Второй способ более продуктивный. (S.Wizard) |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
2sergwizard
гоооосподи... =)) это конечно могучий код, но зачем так так вот сразу человека по голове ? ![]() всего-то спрашивали про движение из пункта А в пункт Б =) и к тому же громоздко как-то, тебе не кажется ? тут конечно кому как нравится писать, но я бы написал то же самое: onClipEvent (load) {
k = 0.002;
decay = 0.96;
rad = 180/Math.PI;
}
onClipEvent (enterFrame) {
mx=_root._xmouse
my=_root._ymouse;
dx = mx-_x
dy = my-_y
_rotation = Math.atan(dy/dx)*rad+180*(mx<_x);
xmov = k*dx+decay*xmov;
ymov = k*dy+decay*ymov;
_x = xmov+_x;
_y = ymov+_y;
}
по-моему незачем делать лишние переменные, дублирующие свойства, до которых и так можно добраться написав всего две буквы =) и к тому же ты сам создаешь себе работу: сначала берешь модуль, а потом выясняешь что же за угол этот модуль предатавляет =) 2tsep файлик твой не открывается... |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
хм... открылся файлик...
в принципе в предыдущих постах все написано, но для особо одаренных вот исправленная версия =) |
|
|||||
|
Регистрация: Jan 2002
Адрес: СПб-Denver-Лермонтов
Сообщений: 1,525
|
Nox, ну не будь таким строгим :-) Я это выцарапал из своего старого исходника. Что первое под руку подвернулось, то и дал. Я еще подумал, что Tsep явно какую-то игрушку стрелялку делает, и это ему поможет. А потом, ну кто ж с тобой потягается насчет кодов? Это я без шуток.
__________________
Для того чтобы узнавать, есть два способа: - задавать вопросы и пытаться самому на них ответить. Второй способ более продуктивный. (S.Wizard) |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
ну ладно, ладно... спасибо канеш...
просто когда человек не особо разбирающийся в скриптах спрашивает как сделать что-то нехитрое, нужно объяснить так, чтобы было понятно... твой код работает, да, только разобраться в нем, не зная заранее, как это нужно писать, довольно трудно... ![]() Последний раз редактировалось Nox Noctis; 17.11.2002 в 23:03. |
|
|||||
|
2 Nox Noctis:
а можно еще немножко упростить??? можно? можно? вот строчку заменить: _rotation = Math.atan(dy/dx)*rad+180*(mx<_x); на _rotation = Math.atan2(dy,dx)*rad; ![]()
__________________
Max. |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
уговорил =)
я по инерции всегда atan пишу =) если не прогуливать математику в восьмом классе, то можно узнать массу интересного... например, что atan возвращает значания от -П/2 до П/2 =)) если это знать, то без разницы как писать в принципе... можно байткоды посмотреть - я думаю атан2 так и реализован - сначала арктангенс а потом плюс 180 при отрицательной ординате =) |
|
|||||
|
нееееее байт коды это не ко мне...
я тока ездить на машине умею, а вот клапана регулировать - не научился... ![]()
__________________
Max. |
![]() |
Часовой пояс GMT +4, время: 23:27. |
|
|
« Предыдущая тема | Следующая тема » |
|
|