#flash #actionscript-3 #actionscript
#flash #actionscript-3 #actionscript
Вопрос:
У меня есть компонент (ссылка на Test
класс), который содержит в себе одну строку, и я помещаю одну точку этой строки в (0, 0).
Затем перетащите его во Flash (fla) и получите его Shape
в AS3, например:
// in Test.as
// assume that the movie clip only contain one line.
var line:Shape = Shape(getChildAt(0));
И я могу получить одну точку этой строки, которая является x
и y
переменной line
. Но как получить другую точку этой строки?
Редактировать: игнорировать материал компонента выше, здесь есть еще один вопрос, но я предполагаю, что он почти такой же, как вопрос выше:
Нарисуйте линию от (0, 0) до (10, 10) и нарисуйте другую линию от (10, 0) до (0, 10), как получить эти линии двухточечной формы в AS3?
Если я обращаюсь к ним как Shape
, то я получаю две похожие фигуры, которые имеют одинаковые x
значения , y
, width
и height
. Есть ли у AS3 какой-либо способ доступа к line как к РЕАЛЬНОЙ линии, а не просто к форме? или у меня есть какой-нибудь способ вычислить это?
Комментарии:
1. спасибо, что указали на это. Я просто обновляю свой вопрос, чтобы он был понятнее, чем раньше. 🙂
2. «Имеет ли AS3 какой-либо способ доступа к line как к РЕАЛЬНОЙ линии, а не просто к форме?» В AS3 нет класса Line. Что вы хотите сделать с линией? Изменить это? Переместить его? Это помогло бы нам лучше понять правильный подход.
3. Я хочу использовать линию в качестве пути к карте и поместить ее в компонент, который ссылается на мой класс as, чтобы я мог легко изменить вес и тип этого пути, а также легко изменить его происхождение и назначение.
4. Подробнее: я хочу использовать строку в качестве пути к карте и поместить ее в компонент, который ссылается на мой класс AS, чтобы я мог легко изменить вес и тип этого пути с помощью тега Inspectable, а также легко изменить его происхождение и назначение во Flash. Но нелегко получить доступ к исходным и конечным точкам в AS, это сильно мешает, мне приходится использовать дополнительное (возможно, бесполезное) свойство «quadrant», чтобы указать линию, в каком квадранте (предположим, что ее исходная точка равна 0,0).
Ответ №1:
Класс Shape в AS3 не предназначен для хранения точек, составляющих фигуру. Скорее это самый простой отображаемый объект, который вы можете создать, который имеет графический объект (нет диспетчеризации событий мыши, не может содержать отображаемые объекты и т. Д.). Его название часто создает впечатление, что оно больше, но это не так. Все, что представлено вашими вызовами рисования, недоступно из формы … или вообще из любого отображаемого объекта в AS3.
Ширина и высота x и y — это просто свойства объектов отображения, которые основаны на его границах. Если вы хотите представлять отдельные точки, вам придется создать свою собственную структуру точек, которая в конечном итоге привыкнет к тому, чтобы вызовы рисования визуализировали ее позже.
если вы в конечном итоге сохраняете точки, а затем рисуете их для каждой фигуры, и хотите затем иметь возможность масштабировать или переводить отдельные фигуры и хотите иметь точки в пространстве координат, отличном от этой локальной фигуры, localToGlobal и globalToLocal DisplayObject могут быть вам полезны.
var local:Point = new Point(10, 10);
var global:Point = someShape.localToGlobal(localPoint);
var inNewCoord:Point = parentContainer.globalToLocal(globalPoint)
Если вам действительно нужно найти эти векторные данные… возможно, вы захотите проверить этот пост:
http://wahlers.com.br/claus/blog/hacking-swf-1-shapes-in-flash /
однако это включает в себя фактический анализ байтовых данных swf.
Комментарии:
1. «Если вы хотите представлять отдельные точки, вам придется создать свою собственную структуру точек, которая в конечном итоге привыкнет к тому, чтобы вызовы рисования визуализировали ее позже» Это то, что мне нужно частично, не могли бы вы описать более подробно? Любая структура, которую я могу нарисовать во Flash и все равно получить (представить в виде строки) в AS3
2. Когда вы говорите нарисовать это во flash, вы имеете в виду инструменты рисования Flash ide? Если это так, я вполне уверен, что вы не получите то, что хотите, и даже если бы вам это удалось … вероятно, вам было бы проще создать swf-файл, который позволял бы создавать и удалять точки для рисования и сохранять эти точки в наиболее удобном формате. Если вам нужно, чтобы этот инструмент существовал в редакторе, вы можете позже превратить его в компонент. Могу ли я запросить дополнительную информацию о том, чего вы пытаетесь достичь?
3. Конечно, я просто хочу использовать line как компонент с некоторыми «проверяемыми» свойствами. Затем я могу использовать его (и компонент узла) для сборки карты во Flash (CS4) для поиска пути в AS3. В качестве данных пути карты мне нужно получить доступ к этим строкам с помощью двухточечной формы. На самом деле есть грязный способ сделать это, в компоненте line я отразил (с помощью тега Inspectable) свойство quadrant, чтобы я мог вычислить две точки линии. Но я думаю, что это просто как-то неудобно.
Ответ №2:
В конце концов, у меня есть хороший хитрый способ сделать это.
Поехали:
- создайте символ и проведите линию от начальной точки (0, 0) до (x, 0)
- свяжите этот символ с вашим исходным кодом, давайте вызовем
Line
. - перетащите этот символ на сцену и поверните, масштабируйте его, если нужно.
-
в коде
Line
:var v:Point = new Point(getBounds(this).right, 0); v = localToGlobal(v);
тогда (x, y) и (v.x, v.y) могут представлять эту строку.