运行效果:
下面是代码:
package branch.matrixtest {
import flash.display.Sprite;
import flash.geom.Matrix;
import junlas.toolutil.Attach;
/**
* @author
*/
public class ApplyMatrixUI {
private var _pmc : Sprite;
private var _ui : Sprite;
private var _originalW : Number=0;
private var _originalH : Number = 0;
//
private var _isCounterClock : Boolean = true;
private var _isLable1 : Boolean = false;
private var _isLable2 : Boolean = false;
private var _numA:Number=200;
private var _numB : Number = -20;
public function ApplyMatrixUI(pmc : Sprite) {
_pmc = pmc;
initDisplay();
initMultiMovie();
}
private function initDisplay() : void {
_ui = Attach.getSprite("UIShowResult");
_pmc.addChild(_ui);
_ui.visible = false;
_ui.x= Root.STAGE_WIGHT/2;
_ui.y = Root.STAGE_HEIGHT/2;
}
private function initMultiMovie() : void {
_originalW = _ui.width;
_originalH = _ui.height;
}
/**
* Enter_Frame事件的run方法
*/
public function runMatrix() : void {
if(_isCounterClock) {
if(_numA == 0 && _numB == -320){//中间判断
_isLable1 = true;
}
_numA -= 10;
if(_isLable1){
_numB += 15;
}else{
_numB -= 15;
}
if(_numA == -200 && _numB == -20){//逆时针的终点位置
_isCounterClock = false;
_isLable1 = false;
}
}else{
if(_numA == 0 && _numB == -320){//中间判断
_isLable2 = true;
}
_numA += 10;
if(_isLable2){
_numB += 15;
}else{
_numB -= 15;
}
if(_numA == 200 && _numB == -20){//顺时针的终点位置
_isCounterClock = true;
_isLable2 = false;
}
}
applyMatrix(_numA,_numB,-150,200);
}
private function applyMatrix(a : Number,b : Number,c : Number,d : Number):void{
_ui.visible = true;
var mat : Matrix = new Matrix();
mat.translate(_ui.x,_ui.y);
mat.a = a / _originalW;
mat.d = d / _originalH;
mat.b = b / _originalW;
mat.c = c / _originalH;
_ui.transform.matrix = mat;
}
}
}
本文介绍了一个使用Flash AS3实现的矩阵变换动画案例。通过不断更新UI元素的矩阵属性,实现了顺时针和逆时针旋转的效果。案例中详细展示了如何通过调整矩阵的a、b、c、d等参数来改变UI元素的位置和大小。
1872

被折叠的 条评论
为什么被折叠?



