Форум 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=122410)

Acrossfy 10.03.2009 19:20

Программное движение по элипсу, проблемы
 
Появилась задача реализовать подобное программно. Муви клип постоянно движется по определенной элиптической траектории. С помощью рисованной траектории и таймлайновой анимации реализовывать подобное не хочется.
Была попытка сделать это с помощью цикла и четырех движений классом TweenLite. Ничего вразумительного из этого не вышло.
Буду очень благодарен, если кто-то поделится своими предложениями и знаниями)

nOobCrafter 10.03.2009 19:46

http://demiart.ru/forum/index.php?showtopic=78132
можно тут глянуть, пример Монстра весьма подробно изложен.

Acrossfy 10.03.2009 20:01

Огромное спасибо, ссылка очень помогла. А то я тут велосипед изобретал)

Acrossfy 12.03.2009 23:13

Вложений: 1
На основе примера Монстра сделал нужное движение.
Код AS1/AS2:

var xdist:Number=2;
var radStep:Number=Math.PI/360;
var ydist:Number=8;
var speed:Number=1;
var angle:Number=0;
 
mc.onEnterFrame = function(){
        angle+=5;
        var rad=angle*radStep;
        mc._x=(Math.cos(rad)*xdist)/2;
        mc._y=(Math.sin(rad)*ydist)/2;
};

Столкнулся со следующей проблемой. Мувиклип движется относительно начала координат сцены. Мне нужно, поместить его на определенную точку. Допустим на (60, 60).
Решается это вот так:
Код AS1/AS2:

        mc._x=60 + (Math.cos(rad)*xdist)/2;
        mc._y=60 + (Math.sin(rad)*ydist)/2;

Однако это жутко портит всю малину, ведь с координатами "mc" работают и другие функции перемещающие объект по сцене.
И тогда, предварительно передвинув муви клип на точку (60, 60), я решаю проблему так:
Код AS1/AS2:

        mc._x=mc._x + (Math.cos(rad)*xdist)/60;
        mc._y=mc._y + (Math.sin(rad)*ydist)/60;

И вот после этого все работает, как надо, кроме самой функции. Объект в данном случае движется не по элипсу, а по элипсообразной спирали, медленно и плавно уходя за экран.
В чем может быть проблема? Как избавиться от этого побочного эффекта?
Один из нюансов. Когда вместо численных кординат, прописал "mc._x" и "mc._у", мувиклип крутился как бешенный, пока я не увеличил делитель в самой формуле. С 2 до 60.

P.S. Мувик обязательно должен быть на главной сцене. Конечно, если бы его можно было просто вложить в другой мувик, и тот уже двигать куда надо, проблем не было бы. Однако код моей флешки не позволяет делать этот клип вложенным.

VVall 12.03.2009 23:23

Вы подумайте, что вы сделали, заменив 60 на переменную, которую в этой-же строке изменяете, и поймёте, что не так.

Acrossfy 12.03.2009 23:56

Ну да.. Глупо было спрашивать почему при этом работает не так, как надо. Но как еще в данном случае заставить клип двигаться вокруг своего положения в сцене, не указывая координат?

VVall 13.03.2009 00:02

Эти цифры и есть положение клипа в сцене, т.е. центр эллипса. Вам нужно завести вместо них две новые переменные, и для движения клипа изменять их, а не mc._x,mc._y.

Acrossfy 13.03.2009 01:08

Ну допустим:
Код AS1/AS2:

//добавляем
var a:Number=prod._x;
var b:Number=prod._y;
 
//изменяем
prod._x=a + (Math.cos(rad)*xdist)/2;
prod._y=b + (Math.sin(rad)*ydist)/2;

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

Добавлено через 4 минуты
Имеется класс, в котором "mc._x" на "a" поменять никак нельзя. Координаты записываются иным способом.
Код AS1/AS2:

TweenLite.to(prod, 0.75, {_x:60, _y:60, ease:Back.easeIn, onComplete:onFinishTween});


VVall 13.03.2009 01:31

Вам надо всё-таки немного думать, что вы делаете и что в результате этого происходит. Если вы будете постоянно присваивать a и b значения _x и _y, какой тогда смысл в добавлении этих переменных?

Вторую проблему можно решить разными способами. Можно сделать невидимый объект, к которому вы будете применять трансформации, а потом перемещать на новое место видимый; можно сделать новый класс на основе нужного, и т.д.

Acrossfy 13.03.2009 02:44

Цитата:

какой тогда смысл в добавлении этих переменных?
Я был бы очень признателен, если бы вы продемонстрировали ваш пример использования переменных.


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

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