Просмотр полной версии : Передвижение MovieClip по вектору
Здравствуйте, столкнулся с небольшой проблемой, которую впервые не смог решить сам...
Дело в том что мне надо переместить объект до определенной точки) но проблема в том что он перемещается по координатам (x y) а не по прямой линии (вектору).
Пожалуйста помогите! Напишите программу с помощью которой любой объект будет перемещаться из одной точки в любую другую по прямой линии (вектору)
//У МЕНЯ СЕЙЧАС ТАК
if (this[select]._x<grib_x) {
this[select]._x += 10;
}
if (this[select]._y>grib_x) {
this[select]._x -= 10;
}
if (this[select]._y<grib_y) {
this[select]._y += 10;
}
if (this[select]._y>grib_y) {
this[select]._y -= 10;
}
Почему бы тебе не попробовать Tween классы?
Но можно и так:
функия go принимает параметры
1)какой клип перемещать
2)скорость передвижения
3)куда по X
4)куда по Y
-------------------------
Например в следующем коде клип с именем clip будет двигаться к мышке в одинаковой скоростью.
_root.onEnterFrame = function() {
go(clip,5,_xmouse,_ymouse);
};
function go(obj, step, targetX, targetY) {
d = Math.sqrt(Math.pow(targetY - obj._y, 2) + (Math.pow(targetX - obj._x, 2)));
y = targetY - obj._y;
x = targetX - obj._x;
sin = y / d;
cos = x / d;
if (d > step) {
obj._x += cos * step;
obj._y += sin * step;
} else {
obj._x = targetX;
obj._y = targetY;
}
}
Смысл устраивать голосование по вопросу на который дается однозначный ответ?
onEnterFrame = onEnterFrameHandler;
var v:Number = 5;
function onEnterFrameHandler():Void
{
var dx:Number = _xmouse - mc._x;
var dy:Number = _ymouse - mc._y;
var rad:Number = Math.atan2(dy, dx);
mc._x += v * Math.cos(rad)
mc._y += v * Math.sin(rad);
mc._rotation = 180 * rad / Math.PI;
}
Спасибо огромное! С детства не дружу с тригонометрией
wormaster
30.06.2010, 06:48
Каким образом возможно реализовать привязку таскаемого объекта к линии. То есть нечто что можно потаскать мышкой(скроллер) и оно должно перемещаться по прямой но не вертикальной или горизонтальной, а диагональной.
rainbowrussia
30.06.2010, 22:42
Каким образом возможно реализовать привязку таскаемого объекта к линии. То есть нечто что можно потаскать мышкой(скроллер) и оно должно перемещаться по прямой но не вертикальной или горизонтальной, а диагональной.
Как вариант - разместить прозрачный мувик под/над нужным, повесить onPress, onRelease, onReleaseOutside на него, на событии onMouseMove отрисовывать нужный мувик в расчетной позиции, относительно положения прозрачного мувика. Можно прозрачному мувику задать границы перемещения (прямоугольник). В событиях onRelease, onReleaseOutside позиционировать прозрачный мувик на место нашего.
а как бы кто сделал, если бы надо было сделать движение непрямолинейное?
например, по траектории кривой (по-моему, 2го порядка, не помню), которые позволяет рисовать as2 метод - curveTo.
Есть клип, начальная точка, конечная, траектория между ними описывается кривой, параметры которой вы знаете (анкор известен) - кто бы к какой идее обратился?
rainbowrussia
02.07.2010, 00:15
Я бы сделал так как написал выше, если формула кривой известна.
А если кривую разбить на пикселы, внести их в массив и уже по массиву двигаться?
ну да, тут задача креативнее получается, разные варианты возможны.
rainbowrussia, я имел в виду не двигать мышкой, ну хотя даже если двигать - вот, допустим, есть у нас
startX = startY = 0;
finX = finY = 100;
controlX = 100;
controlY = 0;
//кривая такого плана, например:
moveTo(startX, startY);
curveTo(controlX, controlY, finX, finY);
и вот теперь мувик, стоящий изначально в 0, 0, надо передвинуть по X, например, на 30. Но приэтом он должен быть отрисован на соответствующем Y, чтобы остаться НА нарисованной кривой.
Добавлено через 1 минуту
сейчас вот почитал про формулы этих кривых, всё сводится к параболам, я так понимаю. Но чтобы узнать параметры конкретно этой параболы... Эх, надо шевелить опять математику :)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.