Создание контуров

Flash Player 10 и более поздних версий, Adobe AIR 1.5 и более поздних версий

В разделе о рисовании линий и кривых (см. Создание линий и кривых) представлены команды для рисования одной линии (Graphics.lineTo()) или кривой (Graphics.curveTo()), а затем для перемещения линии в другую точку (Graphics.moveTo()) с целью построения фигуры. Некоторые расширенные функции API-интерфейса рисования в ActionScript, такие как Graphics.drawPath() и Graphics.drawTriangles(), используют в качестве параметров существующие команды рисования. Поэтому можно указать последовательность команд Graphics.lineTo(), Graphics.curveTo() или Graphics.moveTo() в среде выполнения Flash для выполнения одной инструкции.

Две новые возможности API для рисования позволяют методам Graphics.drawPath() и Graphics.drawTriangles() объединить существующие команды:

  • Класс перечисления GraphicsPathCommand: класс GraphicsPathCommand связывает несколько команд рисования с постоянными значениями. Последовательность этих значений используется в качестве параметров для метода Graphics.drawPath(). Затем, с помощью одной команды можно выполнить визуализацию всей фигуры или сразу нескольких фигур. Также можно динамически изменять значения, передаваемые этим методам, для изменения существующей фигуры.

  • Векторные массивы: векторные массивы содержат последовательность значений определенного типа данных. Таким образом, можно сохранить последовательность констант класса GraphicsPathCommand в одном объекте Vector, а последовательность координат в другом объекте Vector. Метод Graphics.drawPath() или Graphics.drawTriangles() указывает эти значения вместе для создания контура рисования или фигуры.

Теперь не нужно использовать отдельные команды для каждого сегмента фигуры. Например, метод Graphics.drawPath() объединяет в себе методы Graphics.moveTo(), Graphics.lineTo() и Graphics.curveTo(). Эти методы не вызываются по отдельности, а выделяются отдельно в числовые идентификаторы, определяемых классом GraphicsPathCommand. Операция moveTo() обозначается как 1, а операция lineTo() — как 2. Сохраните массив этих значений в объекте Vector<int> для использования в параметре commands. Затем создайте другой массив с координатами в объекте Vector.<Number> для использования в параметре data. Каждое значение GraphicsPathCommand соответствует значениям координат, сохраненным в параметре data, где два последовательных числа определяют местоположение в целевом координатном пространстве.

Примечание. Значения в объекте Vector не являются объектами Point. Вектор — это последовательность чисел, где каждая группа из двух чисел представляет пару координат х и у.

Метод Graphics.drawPath() сопоставляет каждую команду с соответствующими значениями точек (набор из двух или четырех чисел) для создания контура в объекте Graphics:

package{ 
import flash.display.*; 
 
public class DrawPathExample extends Sprite { 
    public function DrawPathExample(){ 
 
    var square_commands:Vector.<int> = new Vector.<int>(5,true); 
    square_commands[0] = 1;//moveTo 
    square_commands[1] = 2;//lineTo 
    square_commands[2] = 2; 
    square_commands[3] = 2; 
    square_commands[4] = 2; 
 
    var square_coord:Vector.<Number> = new Vector.<Number>(10,true); 
    square_coord[0] = 20; //x 
    square_coord[1] = 10; //y 
    square_coord[2] = 50; 
    square_coord[3] = 10; 
    square_coord[4] = 50; 
    square_coord[5] = 40; 
    square_coord[6] = 20; 
    square_coord[7] = 40; 
    square_coord[8] = 20; 
    square_coord[9] = 10; 
 
    graphics.beginFill(0x442266);//set the color 
    graphics.drawPath(square_commands, square_coord); 
    } 
} 
}

В вышеприведенном примере каждая команда и пара координат назначены индивидуально для отображения их положения в массиве, но они могут быть назначены и в одной инструкции. В следующем примере будет нарисована та же звезда путем назначения значений для каждого массива в одной инструкции push():

package{ 
import flash.display.*; 
 
public class DrawPathExample extends Sprite { 
    public function DrawPathExample(){ 
 
    var square_commands:Vector.<int> = new Vector.<int>(); 
    square_commands.push(1, 2, 2, 2, 2); 
    var square_coord:Vector.<Number> = new Vector.<Number>(); 
    square_coord.push(20,10, 50,10, 50,40, 20,40, 20,10); 
 
    graphics.beginFill(0x442266); 
    graphics.drawPath(square_commands, square_coord); 
    } 
} 
}