Использование классов графических данныхFlash Player 10 и более поздних версий, Adobe AIR 1.5 и более поздних версий В усовершенствованном API-интерфейсе рисования пакета flash.display представлен набор классов типа IGraphicsData (интерфейс, реализуемый каждым из классов). Классы, реализующие интерфейс IGraphicsData, выполняют роль контейнеров данных для методов API-интерфейса рисования. Интерфейс IGraphicsData реализуют следующие классы:
Эти классы позволяют сохранять готовые рисунки в векторном массиве объекта типа IGraphicsData (Vector.<IGraphicsData>), используемый как источник данных для других экземпляров фигур или для сохранения информации о рисунках для последующего использования. Обратите внимание, что для каждого стиля заливки предусмотрено несколько классов заливки, но только один класс обводки. В ActionScript есть только один класс штриха IGraphicsData, так как класс штриха использует классы заливки для определения стиля. Поэтому каждый штрих на самом деле представляет собой класс штриха и класс заливки. В противном случае API-интерфейс для этих классов графических данных использует методы, которые они представляют в классе flash.display.Graphics:
Кроме того, класс GraphicsPath имеет собственные служебные методы GraphicsPath.moveTo(), GraphicsPath.lineTo(), GraphicsPath.curveTo(), GraphicsPath.wideLineTo() и GraphicsPath.wideMoveTo(), упрощающие определение этих команд для экземпляра GraphicsPath. Эти служебные методы упрощают непосредственное определение или обновление команд и значений данных. Создав набор экземпляров IGraphicsData, можно начинать визуализацию графики с помощью метода Graphics.drawGraphicsData(). Метод Graphics.drawGraphicsData() последовательно проводит вектор экземпляров IGraphicsData через API рисования. // stroke object var stroke:GraphicsStroke = new GraphicsStroke(3); stroke.joints = JointStyle.MITER; stroke.fill = new GraphicsSolidFill(0x102020);// solid stroke // fill object var fill:GraphicsGradientFill = new GraphicsGradientFill(); fill.colors = [0x0000FF, 0xEEFFEE]; fill.matrix = new Matrix(); fill.matrix.createGradientBox(70,70, Math.PI/2); // path object var path:GraphicsPath = new GraphicsPath(new Vector.<int>(), new Vector.<Number>()); path.commands.push(1,2,2); path.data.push(125,0, 50,100, 175,0); // combine objects for complete drawing var drawing:Vector.<IGraphicsData> = new Vector.<IGraphicsData>(); drawing.push(stroke, fill, path); // draw the drawing graphics.drawGraphicsData(drawing); Изменяя одно значение в контуре, используемом рисунком в примере, можно нарисовать фигуру несколько раз для получения более сложного изображения. // draw the drawing multiple times // change one value to modify each variation graphics.drawGraphicsData(drawing); path.data[2] += 200; graphics.drawGraphicsData(drawing); path.data[2] -= 150; graphics.drawGraphicsData(drawing); path.data[2] += 100; graphics.drawGraphicsData(drawing); path.data[2] -= 50;graphicsS.drawGraphicsData(drawing); Хотя объекты IGraphicsData могут определять стили заливки и обводки, использование этих стилей не является обязательным. Другими словами, методы класса Graphics можно использовать для определения стилей, а объекты IGraphicsData — для рисования сохраненной коллекции контуров и наоборот. Примечание. Метод Graphics.clear() используется для удаления предыдущего рисунка перед началом выполнения нового, если не предусмотрено дополнение к исходному рисунку, как показано в примере выше. При изменении одной части контура или коллекции объектов IGraphicsData, требуется нарисовать заново весь рисунок, чтобы увидеть изменения.
При использовании классов графических данных заливка визуализируется всегда, когда рисуется три или более точек, так как на этом этапе фигура по определению имеет закрытый контур. Несмотря на то, что заливка закрывается, обводка остается открытой, и такое поведение отличается от поведения при использовании нескольких команд Graphics.lineTo() и Graphics.moveTo(). |
|