PDA

Просмотр полной версии : Движение относительно курсора


Килька
14.06.2004, 14:47
Приветствую.
Делаю я значит так.
y = 123._y-_ymouse;
x = 123._x-_xmouse;
angleA = Math.atan2(y, x);
degrees = angleA/(Math.pi/180);
setProperty("123", _rotation, degrees);
123 соответственно название клипа.
Объект крутится относительно мыши, как теперь сделать, чтобы он ходил тоже относительно нее.
Т.е. Нажимаю я вперед и объект идте не вверх, а к мыши. Назд от нее и соответственно вправо и влево.
Только в поиск меня не посылаейте, я тем уже был :p

sergwizard
14.06.2004, 17:47
posX = mc._x;
posY = mc._y;
this.onMouseDown = function(){
posX = _xmouse;
posY = _ymouse;
}
this.onEnterFrame = function(){
y = mc._y -_ymouse;
x = mc._x -_xmouse;
angleA = Math.atan2(y, x);
degrees = angleA/(Math.pi/180);
mc._rotation = degrees;
mc._x-=(mc._x-posX)/10;
mc._y-=(mc._y-posY)/10;
}
Не надо давать клипам имена, состоящие из цифр.

Килька
14.06.2004, 20:28
Не выходит что-то. Может где не там пишу.
Значит создаю я клип - player.
В этом клипе помещен еще один клип - play (обзываю его как в коде - mc)
Пишу далее твой код. Проверяю, все крутится, как надо, а как теперь сделать, чтобы ходил? Куда код ходьбы помещать и может быть он какой-нибудь не такой. Я делаю так
onClipEvent (enterFrame) {
if (Key.isDown(87)) {
_y -= 3;
}
Ну и другие кнопки.
Все равно player идет не относительно мыши, а просто вверх, вниз, вправо и влево.
Кто подскажет, может для этого по-другому надо програмить ходьбу?

Килька
14.06.2004, 20:33
Вот блин :)
Еще раз посмотрел код.
Sergwizard, ты меня неправильно понял. Да и я сразу че-то не догнал. Мне надо, чтобы не при нажатии левой кнопки мыши объект перемещался туда, а чтобы он двигался относительно курсора. Например нажимаю я на кнопку вперед и обект идет в сторону мыши. Т.е. можно ли мистему координат поменять. Вначале я уже писал, как обект поворачиваю, а можно ли вместе с ним координаты повернуть?

Елё
14.06.2004, 22:06
Систему координат конечно можно повернуть, засунув двигаемый мувик внутрь вращаемого. Но тогда получатсья неприятный эфекты при вращении (не относительно центра вращение будет)
Так что лучше не парится и при движении вперед смещать в зависимости от угла:
this._x += Math.cos(this.rotation/180*Math.pi);
this._y += Math.sin(this.rotation/180*Math.pi);

silin
14.06.2004, 22:56
не понятно, зачем надо крутить систему координат - двигай свой мув в сторону мыши, как sergwizard написал, но только по нажатию клавиш

sergwizard
15.06.2004, 00:19
Что-то я тебя не пойму. Что такое "кнопка вперед"? При чем здесь Key(87)? Насколько я помню, это буква W. Ну, если ты так хочешь, то - пожалуйста. Но, мне кажется, что второй вариант в приаттаченом зипе – более интересный и функциональный.

Килька
15.06.2004, 00:42
silin, пасиба большое :) Вправо, влево постараюсь сам догнать.

sergwizard, у меня твой архив не распаковывается.

Килька
15.06.2004, 01:48
Вот блин. Он убыстряется и умедляется относительно того на каком расстоянии от него курсор, а нужно, чтобы все двигалось на 1px. Вот поэтому я и спрашивал, как систему координат можно поменять. Или по-другому пожно сделать, еще как?
Заранее спасибо.

sergwizard
15.06.2004, 04:35
Если нужно равномерное движение, то код такой:
this.onEnterFrame = function(){
var speed = 2;
y = mc._y -_ymouse;
x = mc._x -_xmouse;
mc._rotation = Math.atan2(y, x)/(Math.PI/180)
if(Key.isDown(38)){
mc._x -= Math.cos(Math.atan2(y, x)) * speed;
mc._y -= Math.sin(Math.atan2(y, x)) * speed;
}
if(Key.isDown(40)){
mc._x += Math.cos(Math.atan2(y, x)) * speed;
mc._y += Math.sin(Math.atan2(y, x)) * speed;
}
}

Килька
15.06.2004, 13:56
Спасибо!

Елё
15.06.2004, 15:37
Оригинал написал(а) sergwizard
Если нужно равномерное движение, то код такой:
this.onEnterFrame = function(){
var speed = 2;
y = mc._y -_ymouse;
x = mc._x -_xmouse;
mc._rotation = Math.atan2(y, x)/(Math.PI/180)
if(Key.isDown(38)){
mc._x -= Math.cos(Math.atan2(y, x)) * speed;
mc._y -= Math.sin(Math.atan2(y, x)) * speed;
}
if(Key.isDown(40)){
mc._x += Math.cos(Math.atan2(y, x)) * speed;
mc._y += Math.sin(Math.atan2(y, x)) * speed;
}
}


Не, зачем это тангенсы и косинусы вызывать... Лучше уж так:
this.onEnterFrame = function(){
var speed = 2;
y = mc._y -_ymouse;
x = mc._x -_xmouse;
var norm = Math.sqrt(y*y+x*x);
x /= norm;
y /= norm;
mc._rotation = Math.atan2(y, x)/(Math.PI/180)
if(Key.isDown(38)){
mc._x -= x*speed;
mc._y -= y*speed;
}
if(Key.isDown(40)){
mc._x += x*speed;
mc._y += y*speed;
}
}

Килька
15.06.2004, 16:31
Елё, а боками как двигаться в таком скрипте?

Елё
15.06.2004, 18:29
if(Key.isDown(right))
{
mc._x += y*speed;
mc._y -= x*speed;
}
if(Key.isDown(left))
{
mc._x -= y*speed;
mc._y += x*speed;
}

Или наоборот ;-)

Килька
15.06.2004, 20:24
Спасибо.
Правда о немного по кругу двигается :rolleyes: :D

Елё
15.06.2004, 20:35
Немного по кругу это как слегка беременная ;-)
Конечно он будет двигаться по кругу... Это знаешь ли как луна вокруг земли - морда всегда на землю направлена, а сама все время налево двигается =)