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

xSx 05.04.2011 20:26

Наклон элипса сделанного на синусе.
 
Здраствуйте. Уже вторые сутки голову ломаю у меня движется электрон по элипсу таким способом:
Код AS1/AS2:

                _y = y0 + Math.sin(t += .05) * h;
                _x = x0 - Math.cos(t += .05) * a;

Я пытаюсь его размножить 29 раз (медь)
Код AS1/AS2:

while (i<29){
        obyekt = _root.fey.ba.attachMovie("a", "a" + i, i);

А вот дальше встал в ступор. Как мне их наклонять относительно центра (где в свою очередь находится атом)
В общем то понимаю как сделать несколько орбит. Но вот как наклонить относительно оси не понимаю.
Буду очень благодарен даже вашим соображениям если не коду.

mooncar 05.04.2011 20:34

Нужно использовать класс Matrix.
А точнее, использовать программный эффект skew для копий:
Код AS1/AS2:

import flash.geom.Matrix;
var mtrx:Matrix = new Matrix();
//mtrx.b = -0.5;
mtrx.c = -0.5;
mc.transform.matrix = mtrx;

mc тут - это контейнер, где ваше движение организовано.
Если его нет, то нужно создать.

xSx 05.04.2011 20:48

Спасибо за оперативность и интересный метод. Правда пока только электрон нечаянно сделал "элипсовидным" этим способом))) Но думаю разберусь. Заодно сейчас про класс сам почитаю может что уловлю для себя.
Извиняюсь за привычку не дочитывать. Сейчас попробую...

mooncar 05.04.2011 20:53

Ох уж, не знаю. Я вам дал наводку, думайте :)

Добавлено через 33 минуты
А вообще попробуйте-ка лучше сами орбиты подкорректировать, возможно так лучше будет.
Или просто повернуть (_rotation) контейнер с орбитальным движением.

mooncar 05.04.2011 22:28

Вложений: 1
Вот тут эллипсы орбит повернуты каждый последовательно на +12 с копейками градусов.
Шаг м/у появлениями на сцене задается в setTimeout.
level - чисто для регулировки скорости, берется из стандартного библиотечного регулятора, он не нужен по сути.

Да, исходник сохранен для CS4.
Код:
Код AS1/AS2:

h = 60;
a = 200;
y0 =250;
x0 = 200;
 
for (i = 1; i <= 29; i++)
{
        var to:Number = setTimeout(setOrbita, i * 300, i);
}
 
function setOrbita (num:Number)
{
        var mc:MovieClip = _root.attachMovie('electron_cont', 'orbita' + num, num, { _x:x0, _y:y0});
        mc._rotation = 12.413 * (num - 1) ;
        mc.t = 1 + 0.5 * num;
}
 
 
this.onEnterFrame = function  ()
{
        for (i = 1; i <= 29; i++)
        {
                var mc:MovieClip = this['orbita' + i];
 
                mc.t = mc.t + 0.1 * (level / 100);
 
                if(mc)
                {
                        mc.el._x = - Math.cos(mc.t) * a;
                        mc.el._yMath.sin(mc.t) * h;       
                }
        }
};

В каждм приаттачиваемом контейнере орбиты сидит электрончик el

xSx 06.04.2011 01:22

Воот вот это уже для моего разума подходит :) Большое спасибо завтра попробую оптимизировать для моей флэшечки и отпишусь

Добавлено через 18 часов 5 минут
Что то чувствуется ротэйт идёт относительно крайней части элипса, а не центра.. Хотя может я что то криво перенес
ой уже кое что придумал.

Добавлено через 18 часов 12 минут
что то даже правдоподобнее получается! Спасибо большое сейчас понастрою если какие проблемы отпишусь :)

Добавлено через 18 часов 27 минут
Что то по кругу летают :( Видимо из за того что в 4ый кадр затаскиваю...

Добавлено через 18 часов 44 минуты
Ох именно 31 фпс надо О_о толком правда не понял почему.


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

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