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

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:36   3513   0
  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. * @author hacker47
  18. */
  19. public class Main extends MovieClip
  20. {
  21. private var loader:Loader;
  22. private var url:String = "1.jpg";
  23. private var bitmap:Bitmap;
  24. private var matrix:Matrix;
  25. private var angle:Number = 0;
  26. private var speed:Number = .05;
  27. public function Main()
  28. {
  29. if (stage) init();
  30. else
  31. addEventListener(Event.ADDED_TO_STAGE, init);
  32. }
  33. private function init(e:Event = null):void {
  34. loader = new Loader();
  35. loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
  36. loader.load(new URLRequest(url));
  37. }
  38. private function onComplete(e:Event):void {
  39. bitmap = e.target.content as Bitmap;
  40. bitmap.x = (stage.stageWidth - bitmap.width) / 2;
  41. bitmap.y = (stage.stageHeight - bitmap.height) / 2;
  42. addChild(bitmap);
  43. matrix = bitmap.transform.matrix;
  44. //将图片旋转30度
  45. //rotate(bitmap, 30, bitmap.width / 2, bitmap.height / 2, matrix);
  46. stage.addEventListener(MouseEvent.MOUSE_MOVE, running1);
  47. }
  48. private function running(e:Event = null):void {
  49. bitmap.x = (stage.stageWidth - bitmap.width) / 2;
  50. bitmap.y = (stage.stageHeight - bitmap.height) / 2;
  51. rotate(bitmap, angle, bitmap.width / 2, bitmap.height / 2, matrix);
  52. angle += speed;
  53. //trace(angle);
  54. }
  55. private function running1(e:MouseEvent):void {
  56. bitmap.x = (stage.stageWidth - bitmap.width) / 2;
  57. bitmap.y = (stage.stageHeight - bitmap.height) / 2;
  58. var dy:Number = mouseY - (bitmap.y + bitmap.height / 2);
  59. var dx:Number = mouseX - (bitmap.x + bitmap.width / 2);
  60. //bitmap.rotation = Math.atan2(dy, dx) * 180 / Math.PI;
  61. rotate(bitmap, Math.atan2(dy, dx), bitmap.width / 2, bitmap.height / 2, matrix);
  62. }
  63. private function rotate(dis:DisplayObject,rotation:int,px:int,py:int,srcMatrix:Matrix):void {
  64. var tx:int = dis.x + px;
  65. var ty:int = dis.y + py;
  66. var m:Matrix = srcMatrix.clone();
  67. m.translate(-tx, -ty);
  68. m.rotate(rotation * 180 / Math.PI);
  69. m.translate(tx, ty);
  70. dis.transform.matrix = m;
  71. }
  72. }
  73. }

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP