#flash #actionscript-3 #graphics
#flash #actionscript-3 #графика
Вопрос:
Я нарисовал серию линий, используя команду flash graphics.lineTo, и поместил их в массив, на который будут ссылаться позже. На основе определенных пользовательских взаимодействий клипы, которые содержат эти линии, могут быть сдвинуты вправо, в результате чего линии будут перемещаться вместе с ними, больше не соединяясь с точкой, к которой они были первоначально подключены. Итак, мне нужно расширить строки на величину, на которую был сдвинут их родительский клип (я назвал это incVal). Итак, что мне нужно сделать, это найти точку, в которой заканчивалась каждая из этих линий, и провести от этой точки влево с помощью incVal. Как мне получить эту конечную точку линии?
Это мой код:
Нарисовать линию и добавить ее как в клип, так и в массив для дальнейшего использования:
line.graphics.lineTo(localPoint.x,localPoint.y-10);
membersRef.addChild(line);
parallelArr.push(line);
Чтобы ссылаться на строку позже, выполняя цикл по массиву:
function extendParallels(incVal):void {
for (var i=0;i<parallelArr.length;i ){
trace (parallelArr[i]);
//need to extend line with code here.
}
}
Ответ №1:
Вы не можете получить графические конечные точки именно из спрайта простым способом. Вам следует подумать о сохранении конечной точки в переменной.
var p:Point = new Point(localPoint.x, localPoint.y-10); // flash.geom.Point
И в parallelArr
вы могли бы сохранить объект, который содержит ссылку на эту точку и на DisplayObject, на котором нарисована ваша линия.
Комментарии:
1. Хороший вызов. Я пытался свести к минимуму объем хранимых данных, которые мне нужно собрать, но я думаю, что это единственный способ.
Ответ №2:
Немного измените свою логику, и все будет готово. Сохраните точку в вашем массиве parallelArr, для справки позже.
Что-то вроде:
//during dynaminc population
addLine(localPoint.x, localPoint.y);
private function addLine(pX:int, pY:int):void
{
var nPoint:Point = new Point(pX, pY);
line.graphics.lineTo(nPoint.x, nPoint.y-10);
membersRef.addChild(line);
parallelArr.push(nPoint);
}
Это дает вам доступ к состоянию, в котором была создана линия, и позволяет избежать попыток собрать ее из самой линии. Это было бы особенно сложно, если бы к линии был применен какой-либо фильтр, поскольку flash немедленно отображает ее в виде растрового изображения…