AS3基础:图片绕中心点旋转(Matrix) 与直接rotation不会发虚

  1. package    
  2. {  
  3.     import flash.display.Bitmap;  
  4.     import flash.display.DisplayObject;  
  5.     import flash.display.Loader;  
  6.     import flash.display.MovieClip;  
  7.     import flash.events.Event;  
  8.     import flash.events.MouseEvent;  
  9.     import flash.events.TimerEvent;  
  10.     import flash.geom.Matrix;  
  11.     import flash.media.Sound;  
  12.     import flash.net.NetStream;  
  13.     import flash.net.URLRequest;  
  14.     import flash.utils.Timer;  
  15.       
  16.     /** 
  17.      * ... 
  18.      * @author hacker47 
  19.      */  
  20.     public class Main extends MovieClip   
  21.     {  
  22.         private var loader:Loader;  
  23.         private var url:String = "1.jpg";  
  24.         private var bitmap:Bitmap;  
  25.         private var matrix:Matrix;  
  26.         private var angle:Number = 0;  
  27.         private var speed:Number = .05;  
  28.           
  29.         public function Main()   
  30.         {  
  31.             if (stage) init();  
  32.             else  
  33.                 addEventListener(Event.ADDED_TO_STAGE, init);  
  34.         }  
  35.           
  36.         private function init(e:Event = null):void {  
  37.             loader = new Loader();  
  38.             loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);  
  39.             loader.load(new URLRequest(url));  
  40.   
  41.         }  
  42.           
  43.   
  44.         private function onComplete(e:Event):void {  
  45.             bitmap = e.target.content as Bitmap;  
  46.   
  47.             bitmap.x = (stage.stageWidth - bitmap.width) / 2;  
  48.             bitmap.y = (stage.stageHeight - bitmap.height) / 2;  
  49.             addChild(bitmap);  
  50.               
  51.             matrix = bitmap.transform.matrix;  
  52.               
  53.             //将图片旋转30度  
  54.             //rotate(bitmap, 30, bitmap.width / 2, bitmap.height / 2, matrix);  
  55.             stage.addEventListener(MouseEvent.MOUSE_MOVE, running1);  
  56.               
  57.         }  
  58.           
  59.           
  60.         private function running(e:Event = null):void {  
  61.             bitmap.x = (stage.stageWidth - bitmap.width) / 2;  
  62.             bitmap.y = (stage.stageHeight - bitmap.height) / 2;  
  63.             rotate(bitmap, angle, bitmap.width / 2, bitmap.height / 2, matrix);  
  64.             angle += speed;  
  65.             //trace(angle);  
  66.         }  
  67.           
  68.         private function running1(e:MouseEvent):void {  
  69.             bitmap.x = (stage.stageWidth - bitmap.width) / 2;  
  70.             bitmap.y = (stage.stageHeight - bitmap.height) / 2;  
  71.               
  72.             var dy:Number = mouseY - (bitmap.y + bitmap.height / 2);  
  73.             var dx:Number = mouseX - (bitmap.x + bitmap.width / 2);  
  74.             //bitmap.rotation = Math.atan2(dy, dx) * 180 / Math.PI;  
  75.               
  76.             rotate(bitmap, Math.atan2(dy, dx), bitmap.width / 2, bitmap.height / 2, matrix);  
  77.         }  
  78.           
  79.         private function rotate(dis:DisplayObject,rotation:int,px:int,py:int,srcMatrix:Matrix):void {  
  80.             var tx:int = dis.x + px;  
  81.             var ty:int = dis.y + py;  
  82.               
  83.             var m:Matrix = srcMatrix.clone();  
  84.             m.translate(-tx, -ty);  
  85.             m.rotate(rotation * 180 / Math.PI);  
  86.             m.translate(tx, ty);  
  87.             dis.transform.matrix = m;  
  88.               
  89.         }  
  90.           
  91.     }  
  92.   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值