PDA

Просмотр полной версии : Программная линия не отображается поверх нижележащих слоев


Acrossfy
05.08.2009, 02:18
Здравствуйте. Не могу понять в чем проблема. АС протягивающий линию находится аж на 9-ом слое в сцене. Все слои оказавшиеся ниже перекрывают ее. В том числе и фон.
Линия в данном случае имитирует поведение веревки. Код для веревки брал в найденном исходнике.
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() добавить:

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 и в нем рисуется прямоугольник.
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
Согласен, невнимательно отследил ситуацию.