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

motor4ik 25.07.2006 21:57

а я короче ветер вертикальный добавил, ваще, вещь, а еще его можно рнд сделать, ваще класс...но нитка реально улетная, правда двоится (( в глазах у меня )))

etc 25.07.2006 22:28

gravity и есть "вертикальный ветер"

motor4ik 26.07.2006 00:05

хм, я думал это сила тяжести:away:

etc 26.07.2006 00:07

Она же сила тяжести

iNils 26.07.2006 00:10

А ветер ведь порывами дует :)

motor4ik 26.07.2006 00:16

вот вот все верно, так что я круто сделал, сила тяжести постоянная, а ветер вертикальный рнд сделал )))

iNils 26.07.2006 00:51

Осталось только сопротивление материала добавить, чтобы при много большой длине веревка рвалась от своего веса.

3dgod 20.11.2009 16:16

На основе кода господина etc (спасибо ему больше) публикую код улучшенной веревки, с затухающим колебанием, лимитированным фактором растяжения, с подвешиванием на конце груза и фиксированной точкой привязки верхнего конца.

Груз выполнен в виде мувиклипа на сцене.

Я создаю сразу 8 веревок, с немного различающимеся параметрами, чтобы не одинаково "жили"

Код AS1/AS2:

//функция выборки случайного числа из диапазона
function Range (min:Number, max:Number):Number
{
        var randomNum:Number = Math.floor (Math.random () * (max - min + 1)) + min;
        return randomNum;
}
//создаю контейнеры для 8 линий, привязываю к каждой веревке груз
for (i = 1; i <= 8; i++)
{
        this.createEmptyMovieClip ("line" + i,_root.getNextHighestDepth ());
        _root["line" + i].letter = _root["letter_" + i];
}
//инициализация веревки
this.init = function (num, len, X, line, t)
{
        line.len = len;
        line.wind = 0;
        //таймер для колебаний
        line.t = t;
        //мультипликатор для затухания
        line.multi = 1;
        line.point = [];
        for (var i = 0; i < num; i++)
        {
                var t = new Object ();
                t.x = X;
                //помещаем все точки веревки вверх, чтобы веревка "упала"
                t.y = -200;
                line.point.push (t);
        }
};
 
//собственно "жизнь" веревки
for (j = 1; j <= 8; j++)
{
        this["line" + j].onEnterFrame = function ()
        {
                this.t += 0.1;
                //затухания
                this.multi *= 0.99;
                this.gravity = 20 + this.t;
                this.wind = Math.sin (this.t) * 6 * this.multi;
                //помещаем верхний конец в нужный "гвоздик" и фиксируем
                this.point[0].y = 0;
                this.clear ();
                this.lineStyle (0,0xD7E1EB,100);
                this.moveTo (this.point[0].x,this.point[0].y);
                for (var i = 1, len = this.point.length; i < len; i++)
                {
                        //[x1,y1] и [x2,y2] - координаты предыдущей и текущей точки соответственно
                        var x1 = this.point[i - 1].x, y1 = this.point[i - 1].y;
                        var x2 = this.point[i].x, y2 = this.point[i].y;
                        // xd и yd - разница расстояний между точками
                        var xd = x2 - x1 + this.wind;
                        var yd = y2 - y1 + this.gravity;
                        //dist - расстояние между точками
                        var dist = Math.sqrt (xd * xd + yd * yd);
                        //коррекция расстояния между точками до требуемого (через подобие)
                        this.point[i].x = x1 + (xd * (Math.cos (this.t * 1.3) * 1 * this.multi + this.len)) / dist;
                        this.point[i].y = y1 + (yd * (Math.sin (this.t * 1.3) * 1 * this.multi + this.len)) / dist;
                        this.lineTo (this.point[i].x,this.point[i].y);
                }
                //перемещаем груз к последней точке
                this.letter._x = this.point[this.point.length - 1].x;
                this.letter._y = this.point[this.point.length - 1].y;
        };
 
}


iflamberg 20.11.2009 16:30

23dgod: ничего нету. Функция init нигде не вызывается.


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

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