Exemplo de geometria: aplicação de uma transformação de matriz em um objeto de exibiçãoFlash Player 9 e posterior, Adobe AIR 1.0 e posterior O aplicativo de exemplo DisplayObjectTransformer mostra vários recursos de uso da classe Matrix para transformar um objeto de exibição, incluindo o seguinte:
O aplicativo fornece uma interface para ajustar os parâmetros de transformação da matriz, como a seguir: ![]() Quando o usuário clica no botão Transformar, o aplicativo aplica a transformação apropriada. ![]() O objeto de exibição original e o objeto de exibição com um giro de - 45° e um dimensionamento de 50% Para obter os arquivos do aplicativo para este exemplo, consulte www.adobe.com/go/learn_programmingAS3samples_flash_br. Os arquivos do aplicativo DisplayObjectTransformer podem ser encontrados na pasta Samples/DisplayObjectTransformer. O aplicativo consiste nos seguintes arquivos:
Definição da classe MatrixTransformerA classe MatrixTransformer inclui métodos estáticos que aplicam transformações geométricas de objetos Matrix. O método transform()O método transform() inclui parâmetros para cada um dos itens a seguir:
O valor de retorno é a matriz resultante. O método transform() chama os seguintes métodos estáticos da classe:
Cada um retorna a matriz de origem com a transformação aplicada. O método skew()O método skew() inclina a matriz, ajustando as propriedades b e c da matriz. Um parâmetro opcional, unit, determina as unidades usadas para definir o ângulo de inclinação e, se necessário, o método converte o valor angle em radianos: if (unit == "degrees") { angle = Math.PI * 2 * angle / 360; } if (unit == "gradients") { angle = Math.PI * 2 * angle / 100; } Um objeto Matrix skewMatrix é criado e ajustado para aplicar a transformação de inclinação. Inicialmente, é a matriz de identidade, como a seguir: var skewMatrix:Matrix = new Matrix(); O parâmetro skewSide determina o lado para o qual a inclinação é aplicada. Se for definida como "right", o seguinte código define a propriedade b da matriz: skewMatrix.b = Math.tan(angle); Caso contrário, o lado inferior é inclinado ajustando a propriedade c de Matrix, como a seguir: skewMatrix.c = Math.tan(angle); A inclinação resultante é aplicada à matriz existente, concatenando as duas matrizes, como mostra o seguinte exemplo: sourceMatrix.concat(skewMatrix); return sourceMatrix; O método scale()Ο exemplo a seguir mostra que o método scale() primeiro ajusta o fator de dimensionamento, caso seja fornecido como uma porcentagem e, em seguida, usa o método scale() do objeto da matriz: if (percent) { xScale = xScale / 100; yScale = yScale / 100; } sourceMatrix.scale(xScale, yScale); return sourceMatrix; O método translate()O método translate() apenas aplica os fatores de transposição dx e dy chamando o método translate() do objeto da matriz, como a seguir: sourceMatrix.translate(dx, dy); return sourceMatrix; O método rotate()O método rotate() converte o fator de rotação de entrada em radianos (se fornecido em graus ou gradientes) e chama o método rotate() do objeto da matriz: if (unit == "degrees") { angle = Math.PI * 2 * angle / 360; } if (unit == "gradients") { angle = Math.PI * 2 * angle / 100; } sourceMatrix.rotate(angle); return sourceMatrix; Chamada do método MatrixTransformer.transform() no aplicativoO aplicativo contém uma interface do usuário para obter os parâmetros de transformação do usuário. Então, ele transmite esses valores, junto com a propriedade matrix da propriedade transform do objeto de exibição, ao método Matrix.transform(), da seguinte maneira: tempMatrix = MatrixTransformer.transform(tempMatrix, xScaleSlider.value, yScaleSlider.value, dxSlider.value, dySlider.value, rotationSlider.value, skewSlider.value, skewSide ); O aplicativo aplica o valor de retorno à propriedade matrix da propriedade transform do objeto de exibição, acionando a transformação: img.content.transform.matrix = tempMatrix; |
![]() |