PDA

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


dmitriev
16.01.2009, 15:15
http://img297.**************/img297/874/55132851vq9.th.jpg (http://img297.**************/my.php?image=55132851vq9.jpg)

Черные линии примерно описывают предполагаемую траекторию.
Как добиться "такого" небольшого искажения прямой траектории?

ENDrain
16.01.2009, 16:10
function myFunction(a, b, c, d):Void {
// a - величина отклонения по оси x
// b - велечина отклонения по оси y
// c и d - для отслеживания порога отклонения, изначально должны бать равны
if (c == d) {
// Пока порог не достигнут
двигаемыйОбъект._x /*или что там*/+= a;
двигаемыйОбъект._y += b;
} else {
двигаемыйОбъект._x -= a;
двигаемыйОбъект._y -= b;
};
if (y /*или*/x == с /*или*/d) {
c /*или*/d = любое другое значение;
};
};


Нужна еще одна функция, которая будет изменять координаты по прямой, но это уже просто. Ее нужно поставить на частый интервал, а эту - на интервал пореже. Тогда, вроде бы, должно получиться.
Раньше с координатами толком не работал, так что если сморозил какую-нибудь глупость...

dmitriev
16.01.2009, 16:14
Я на самом деле не понял ничего) Думаю как то проще можно, по крайней мере в одну функцию.

thrash_er
18.01.2009, 04:16
возможно для такой анимации подойдет fuse kit

пример (http://narod.ru/disk/5047211000/example.swf.html)

gloomyBrain
18.01.2009, 06:35
Как то раз собрались 4 флешера и стали долго и упорно обсуждать эту тему... =)
В общем, пришли вот к какому выводу:

- пишем функция, высчитывающую координаты точек
- сохраняем эти точки в массив (можно 2 массива - для _x и для _y)
- пишем функцию onEnterFrame или setInterval и меняем координаты клипа на те, что в массиве

Хотите посмотреть - смотрите (лучше сразу последнюю страницу)
очень длинная тема (http://www.flasher.ru/forum/showthread.php?t=114720)

ENDrain
23.01.2009, 15:58
Так, до меня дошло, что я написал полную ахинею ))
Значит, сначала переменные:

var nA:Number = 5; // Смещение по одной оси (в данном случае - x)
var nB:Number = 15; // Максимальное отклонения от прямой по другой оси
var nCounter:Number = 0; // Счетчик, следящий за отклонением
var bEnd:Number = 0; // Переключатель, следящий за тем же
//В принципе, они могут быть заключены в массив, но это уж на чей вкус

И одна-единственная функция:

function имяФункции(a, b):Void {
mcMC._x += a;
// Здесь та ось, по которой движение постоянно
(bEnd == 0) ? mcMC._y += b-nCounter : mcMC._y -= b-nCounter;
// Здесь проверяется, дошла ли кривая до максимальной точки отклонения; в зависимости от этого, x идет либо вниз, либо вверх
(bEnd == 0) ? (nCounter < b) ? nCounter++ : bEnd = 1 : nCounter--;
// То же самое, но с nCounter - он постепенно увеличивается и уменьшается, обеспечивая плавность
if(nCounter == 0) {
clearInterval(nInterval);
// Когда объект вернулся на исходную x - прекратить.
}
}