Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Движение по кривой программно (http://www.flasher.ru/forum/showthread.php?t=120293)

dmitriev 16.01.2009 15:15

Движение по кривой программно
 
[IMG]http://img297.**************/img297/874/55132851vq9.th.jpg[/IMG]

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

ENDrain 16.01.2009 16:10

Код AS1/AS2:

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

пример

gloomyBrain 18.01.2009 06:35

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

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

Хотите посмотреть - смотрите (лучше сразу последнюю страницу)
очень длинная тема

ENDrain 23.01.2009 15:58

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

Код AS1/AS2:

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

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

Код AS1/AS2:

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 - прекратить.
                }
}



Часовой пояс GMT +4, время: 11:09.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.