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

Acrossfy 05.08.2009 02:18

Программная линия не отображается поверх нижележащих слоев
 
Здравствуйте. Не могу понять в чем проблема. АС протягивающий линию находится аж на 9-ом слое в сцене. Все слои оказавшиеся ниже перекрывают ее. В том числе и фон.
Линия в данном случае имитирует поведение веревки. Код для веревки брал в найденном исходнике.
Код AS1/AS2:

numPoints = 20;
minDist = 50;
init();
function init()
{
        var dx = h2._x - rocket2._x;
        var dy = h2._y - rocket2._y;
        points = new Array();
        for(var i=0;i<numPoints;i++)
        {
                points[i] = {x:rocket2._x + dx / numPoints * i, y:rocket2._y + dy / numPoints * i, vx:0, vy:0};
        }
        onEnterFrame = draw;
}
 
function draw()
{
        for(var i=0;i<numPoints;i++)
        {
                points[i].x += points[i].vx;
                points[i].y += points[i].vy;
                /*
                points[i].vx += Math.random() - .5;
                points[i].vy += Math.random() - .5;
                */

                if(i == 0)
                {
                        var x1 = rocket2._x;
                        var y1 = rocket2._y;
                }
                else
                {
                        var x1 = points[i-1].x;
                        var y1 = points[i-1].y;
                }
                if(i < numPoints-1)
                {
                        var x2 = points[i+1].x;
                        var y2 = points[i+1].y;
                }
                else
                {
                        var x2 = h2._x;
                        var y2 = h2._y;
                }
//                trace([x1, y1, x2, y2]);
                points[i].vx += (x1 - points[i].x) * .05;
                points[i].vy += (y1 - points[i].y) * .05;
                points[i].vx += (x2 - points[i].x) * .05;
                points[i].vy += (y2 - points[i].y) * .05;
                points[i].vy += .05;
 
                points[i].vx *= .93;
                points[i].vy *= .93;
        }
        clear();
        lineStyle(4,0x0000FF);
        moveTo(rocket2._x, rocket2._y);
        for(var i=0;i<numPoints-1;i++)
        {
                var x = (points[i].x + points[i+1].x) / 2;
                var y = (points[i].y + points[i+1].y) / 2;
                curveTo(points[i].x, points[i].y, x, y);
        }
        curveTo(points[i].x, points[i].y, h2._x, h2._y);
}

h2 и rocket2 - инстанс неймы объектов между которыми "натягивается" линия(веревка).
Заранее спасибо за помощь.

alekslitvinenk 05.08.2009 02:28

В этом коде не создаются новые мувики и нигде нет вызовов swapDepths();
причина где-то в ином месте...
или попробуйте
в функцию init() добавить:
Код AS1/AS2:

 
this.swapDepths(_parent.getNextHighestDepth());


Acrossfy 05.08.2009 02:54

Добавил, ничего не изменилось..

Wolsh 05.08.2009 10:05

Код написан в руте я так понимаю, какой тут своп и какой парент? Создавайте пустой клип для графики.

Acrossfy 05.08.2009 10:39

Создал символ. Написал внутри на кадре код. Перед инстансами добавил "_root."
В итоге линия рисуется поверх всего, но координаты не пойми как вычисляются из внутреннего символа. Линия строится вообще не пойми как, не соединяя то, что должна.

Добавлено через 1 минуту
Добавить соединяемые мувики внутрь этого символа нет возможности.

mooncar 05.08.2009 11:03

Вам рисовать нужно внутри нового созданного вами символа, поэтому не надо было добавлять _root перед именами мувиков.
А для перевода координат между _root и внутренними координатами мувика используйте globalToLocal и localToGlobal.
И еще, общие замечания.
1) От того где находится код никак не зависит, на какой глубине будут выполняться операции по созданию новых объетов, определенные в AS.
2) В готовом ролике нет слоев. Там есть только глубины, Z-координата, и области перекрытия определяются, исходя из глубины. Глубина и слой в FLA-проекте - совершенно разные вещи. Наличие того или иного символа на определенном слое, если нет исполняемого кода, работающего с глубинами, дает только начальные взаимные расположения положения объектов в готовом ролике по z-координате. Причем для мувиков, созданных руками, глубины лежат на -16 000-х глубинах, гарантируя таким образом объектам, созданным с AS, свободные глубины от 0 и выше.
Главное для вас - рисовать в мувике, расположенном в слое, который находится поверх тех слоев, где находятся объекты, которые нужно перекрыть.

Вот в этом примере создается программно мувик bg на глубине 0 и в нем рисуется прямоугольник.
Код AS1/AS2:

this.createEmptyMovieClip("bg", 0);
this.bg.moveTo(0,0);
this.bg.lineStyle(0,0x000000,0);
this.bg.beginFill(0xD1CCB3, 100);
this.bg.lineTo(100, 0);
this.bg.lineTo(100, 20);
this.bg.lineTo(0, 20);
this.bg.lineTo(0, 0);
this.bg.endFill();

Сделайте нечто подобное и не забудьте о переводе координат.

Acrossfy 05.08.2009 13:03

mooncar, спасибо большое, последний пример очень помог. Я просто создал клип, и дописал у себя в координатах this.line. Координаты не переводил, т.к. не совсем разобрался через хелп в функциях localToGlobal и наоборот.

Wolsh 05.08.2009 17:49

У пустого клипа, созданного в руте, в координатах 0,0 - зачем переводить координаты? Они такие же как в _root.

mooncar 05.08.2009 21:18

Согласен, невнимательно отследил ситуацию.


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

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