Вход

Просмотр полной версии : Перемещение объекта на место клика


SeryEg
16.08.2004, 02:07
Обьясните пожалусто, как сделать.

ПС Либо я слишком глуп либо не умею искать, но найти где это описывается не смог.

xpycT
16.08.2004, 02:18
http://www.flasher.ru/tutorial/viewtut.php?id=91

SeryEg
16.08.2004, 02:56
Там описывается как сделать плавное перемещение, а мне нужно что бы скорость у объекта была постоянной

xpycT
16.08.2004, 03:27
Цитата оттуда:
Проверьте. Где бы ни был объект, когда вы кликаете мышкой, объект перемещается под мышиный курсор. Он делает это мгновенно, в одном фрейме.

SeryEg
16.08.2004, 03:30
Да, ну а нужно что бы он туда ровно двигался, а не мгновенно перемещался.
а дальше описывается как делать плавное движение

Antares
16.08.2004, 04:39
Эта тема уже недавно поднималась (http://flasher.ru/forum/showthread.php?s=&threadid=61608)

SeryEg
16.08.2004, 16:44
Ну опять же, там сделали плавное перемещение, а мне нужно ровное

Antares
16.08.2004, 18:13
Плавное, ровное...в чем разница?
Я привел алгоритм для движения без ускорения -- это плавное или ровное?

SeryEg
16.08.2004, 18:40
а как бы алгоритм перевести на язык actionScript? Не дашь пример?

artfla$her
17.08.2004, 02:08
Ну, если ты пробовал использовать мой пример в той ссылке (который, кстати говоря, многие упорно называют "неработающим" :D :D ), то просто измени строку
this.spdPercent = 0.1;
на
this.spdPercent = 1;
И будет тебе мгновенное перемещение, прям вообще мгновенное :)

SeryEg
17.08.2004, 02:25
Тьфу! Да мне не мгновенное нужно! А с одной скоростью, что бы после клика объект двигался ровно, без ускорения и замедления с одной скоростю. Ну как еще объяснить....вот если сделать елементарный motion tween без параметра easy, то будет то что мне нужно. Только мне нужно объект перемещался к месту нажатия мыши......

Antares
17.08.2004, 03:36
Оригинал написал(а) SeryEg
а как бы алгоритм перевести на язык actionScript? Не дашь пример?
Позднее. Если кто-нибудь меня не опредит ;)

Nox Noctis
17.08.2004, 12:41
SeryEg, не надо опускаться до уровня "сделайте всё за меня, а я посмотрю и разберусь" :)

код для случая если нужно задать скорость явно и в пикселях.
this.createEmptyMovieClip("mc", 0);
mc.lineStyle(15, 0xff6600, 100);
mc.lineTo(.15, 0);
//
mc.onMouseDown = function() {
var speed = 10;
var dx = _root._xmouse-this._x;
var dy = _root._ymouse-this._y;
var angle = Math.atan2(dy, dx);
var distance = Math.sqrt(dx*dx+dy*dy);
this.steps = Math.ceil(distance/speed);
this.dx = Math.cos(angle)*speed;
this.dy = Math.sin(angle)*speed;
this.count = 0;
this.x = _root._xmouse;
this.y = _root._ymouse;
this.onEnterFrame = function() {
if (this.count == this.steps-1) {
this._x = this.x;
this._y = this.y;
delete this.onEnterFrame;
} else {
this._x += this.dx;
this._y += this.dy;
this.count++;
}
};
};я бы написал в два раза короче, но так вроде всё должно быть понятно.

mc - это клип с которым происходят действия.

названия переменных говорят сами за себя.

для того чтобы не вычислять во время движения всякие там синусы - считаем всё это заранее. т.е:
— вычисляем угол движения,
— вычисляем расстояние до точки клика,
— с учетом заданной скорости считаем сколько будет шагов до цели (переменная this.steps).
— считаем на сколько надо изменять _x и _y на каждом шаге с учетом угла двужения и скорости (переменные this.dx и this.dy)
— счетчик this.count отмеряет сколько было сделано шагов.

и всё собственно. когда все эти вычисления сделаны - остаётся только создать функцию onEnterFrame, в которой менять координаты с заданным шагом заданное количество раз. на последнем шаге просто приравниваем координаты клипа к координатам клика, и стираем onEnterFrame.

SeryEg
17.08.2004, 20:37
Там если нажать на место где стоит объект mc то он начинает по Х двигаться вправо. И как бы сделать что бы весь скрипт находился в объекте.

И на счет опустился, просто я экшон скрипт знаю на уровне комманды Play() :)

Antares
18.08.2004, 02:20
Тогда тебе помогут умные книжки. В том числе, и по русскому языку.

xpycT
18.08.2004, 02:47
Bad Habit
По моему, если кто нибудь, снизойдёт до людей "не столь сведущих", и что нибудь, для них сделает, то они всёравно без умных книжек, по англ. яз. в том числе, ни хрена, ни в чём не разберутся.(имхо)

iNils
18.08.2004, 11:49
Полностью согласен с xpycTом. Можно помочь ликвидировать белые пятна в знаниях, но научить человека тому чему он не учился в школе ... кому это надо?

Nox Noctis
18.08.2004, 12:02
Оригинал написал(а) SeryEg
Там если нажать на место где стоит объект mc то он начинает по Х двигаться вправо.да, я недосмотрел.

исправь. :)

там всё очевидно - математика на уровне седьмого класса средней школы.