ActionScript/A classe graphics
A classe graphics
[editar | editar código-fonte]A classe graphics (flash.display.Graphics) é a responsável por desenhar objetos em vetor no ActionScript 3.0 (veja uma definição sobre desenhos com vetores aqui).
Para desenharmos, precisamos que seja criado um objeto de exibição (como um Sprite) e trabalharmos com métodos e atributos da classe graphics, que vêm junto com o objeto. Veja o exemplo:
var sp:Sprite = new Sprite();
// Desenhando com um objeto graphics
var g:Graphics = sp.graphics;
g.beginFill(0xFF0000, 1);
g.drawRect(10, 10, 300, 200);
g.endFill();
addChild(sp);
Você não precisa criar um objeto graphics necessariamente. Você pode usar reescrevendo junto com o Sprite:
var sp:Sprite = new Sprite();
// Outra maneira de se desenhar o retângulo
sp.graphics.beginFill(0xFF0000, 1);
sp.graphics.drawRect(10, 10, 300, 200);
sp.graphics.endFill();
addChild(sp);
Definindo o preenchimento
[editar | editar código-fonte]Utilize o método beginFill(cor,alfa)
. O primeiro parâmetro deve ser um valor hexadecimal (no modo 0xRRGGBB), e o segundo um valor entre 0.0 (totalmente transparente) e 1.0 (opaco). Depois você deve chamar os métodos que desenham e por fim um método endFill()
para finalizar a arte.
var sp:Sprite = new Sprite();
// Começando o preenchimento
sp.graphics.beginFill(0xFF0000, 1);
// Métodos de desenho (forma, contorno, etc.)
sp.graphics.drawRect(10, 10, 300, 200);
// Finaliza preenchimento
sp.graphics.endFill();
addChild(sp);
Desenhando um retângulo
[editar | editar código-fonte]Utilize o método drawRect(x, y, width, height)
. O x representa a posição na horizontal que ele irá ocupar; y, a horizontal; width é o tamanho da largura e height, da altura (todos em pixels e valores do tipo Number).
var sp:Sprite = new Sprite();
sp.graphics.beginFill(0xFF0000, 1);
sp.graphics.lineStyle(1, 0x00FF00, 1); // Contorno para o desenho
sp.graphics.drawRect(10, 10, 300, 200);
sp.graphics.endFill();
addChild(sp);
Para adicionar um contorno inserimos o método lineStyle()
(veja mais abaixo na seção de linhas e curvas).
Desenhando retângulo com cantos arredondados
[editar | editar código-fonte]Use método drawRoundRect(x, y, width, height, ellipseWidth[, ellipseHeight])
. O parâmetro ellipseWidth define a largura do arrendondamento do canto e ellipseHeight (opcional) a altura (são do tipo Number).
var sp:Sprite = new Sprite();
sp.graphics.beginFill(0xFF0000, 1);
sp.graphics.drawRoundRect(100, 100, 200, 150, 25);
sp.graphics.endFill();
addChild(sp);
Desenhando círculo
[editar | editar código-fonte]Use o método drawCircle(x, y, radius)
para criar um círculo perfeito. O parâmetro radius (do tipo Number) define o tamanho do círculo (o seu raio). Quanto maior o valor, maior será o círculo.
var sp:Sprite = new Sprite();
sp.graphics.beginFill(0xFF0000, 1);
sp.graphics.drawCircle(50, 50, 25);
sp.graphics.endFill();
addChild(sp);
Desenhando uma elipse
[editar | editar código-fonte]O método drawEllipse(x, y, width, height)
lembra o modo de desenhar do retângulo e permite que criemos uma forma de elipse.
var sp:Sprite = new Sprite();
sp.graphics.beginFill(0xFF0000, 1);
sp.graphic.drawEllipse(100, 100, 200, 100);
sp.graphics.endFill();
addChild(sp);
Preenchimento com gradiente
[editar | editar código-fonte]Veja o snippet abaixo:
var gradTipo:String = GradientType.LINEAR;
var cores:Array = [0x000000, 0x000000];
var alfas:Array = [1, 0];
var limites:Array = [0, 255];
var matriz:Matrix = new Matrix();
matriz.createGradientBox(100, 50, 0, 0, 0);
var sp:Sprite = new Sprite();
sp.graphics.beginGradientFill(gradTipo, cores, alfas, limites, matriz); // Aplica o gradiente
sp.graphics.drawRect(0, 0, 100, 100);
sp.graphics.endFill();
addChild(sp);
O gradTipo armazena uma String GradientType.LINEAR
, que trata de um gradiente do tipo linear (o outro modo é GradientType.RADIAL
, que é circular).
A array cores armazena as cores que serão usadas (no caso, só preto).
Já os alfas lidam com a visibilidade (no caso, será do visível 1 ao invisível 0).
Os limites definem a amplitude de cores com que ser irá trabalhar (como no padrão RGB o limite é de 0 a 255, iremos abranger todo o espectro).
Então criamos um objeto do tipo Matrix (matriz) e criamos uma caixa de gradiente (matriz.createGradientBox()
), que leva cinco parâmetros: width e height (largura e altura do preenchimento gradiente, que no nosso exemplo terá o mesmo tamanho do retângulo - 100x100), rotation, grau de rotação do preenchimento, e tx e ty, que interferem na posição do gradiente, em graus (ele rotaciona o ponto de gradiente).
Por fim, aplicamos o gradiente com o método beginGradientFill()
e os parâmetros vistos no snippet acima.
Linhas e curvas
[editar | editar código-fonte]Para desenhar linhas retas use os métodos lineStyle()
(para definir cores e espessura de linha, entre outras), moveTo()
(ponto de início de desenho) e lineTo()
(ponto final da linha).
var sp:Sprite = new Sprite();
sp.graphics.lineStyle(1, 0x00FF00, 1); // Linha com espessura 1, cor verde e opaco (alfa 1)
sp.graphics.moveTo(200, 200);
sp.graphics.lineTo(150, 150);
sp.graphics.moveTo(200, 200);
sp.graphics.lineTo(250, 200);
addChild(sp);
Para desenhar uma curva, basta utilizar curveTo()
, que pede um ponto inicial de x, o ponto y, e o ponto de aconragem de x e o de y:
var sp:Sprite = new Sprite();
sp.graphics.lineStyle(1, 0x00FF00, 1);
sp.graphics.curveTo(100, 100, 200, 0);
addChild(sp);