当前位置: 首页 > 图文教程 > Flash动画 > ActionScript > Flash AS3对单个图片进行角色动作化处理

ActionScript
FLASH 3D相册之利用BitmapData类制作
Flash 脚本游戏开发教程 第一课
Flash 脚本游戏开发教程第二课
Flash 脚本游戏开发教程第三课
Flash 脚本游戏开发教程第四课
Flash 脚本游戏开发教程第五课
Flash 脚本游戏开发教程第六课
Flash 脚本游戏开发教程第七课
Flash 脚本游戏开发教程第八课
Flash AS实现的蝌蚪摆尾动画的教程
从基础开始深入学Flash AS3教程(4)(译文)
从基础开始深入学Flash AS3教程(5)(译文)
从基础开始深入Flash AS3教程(2)(译文)
从基础开始深入学Flash AS3教程(3)(译文)
Flash AS3对单个图片进行角色动作化处理
从基础开始深入Flash AS3教程(1)(译文)
Flash教程:if条件语句的用法
Flash AS教程:_visible属性的详细讲解
Flash AS教程:图片环绕旋转效
Flash教程:trace()的使用

ActionScript 中的 Flash AS3对单个图片进行角色动作化处理


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-16   浏览: 83 ::
收藏到网摘: n/a

大家肯定看过大型游戏一张各个人物动作图片继承在一张位图上的程序吧~现在看看这个!

我今天在蓝色论坛里看到一个有关"BitmapData类"的问题,我觉得用BitmapData类是可以实现里说的C  处理图片功能,再加我好久没写AS3的程序,都快生锈了!就当练练手吧!我查了一下Flash帮助文件,整理一下思路花了中午时间写出下面document类文件;这个功能比较适合做Flash游戏开发了。我加了键盘事件,用来控制角色移动方向。如果在对类代码中使用的类对象不清楚的话,请看Flash帮助文件吧!

提问者提供一个角色动作图片,我也就在就直接用这图片了!

Flash AS3对单个图片进行角色动作化处理

演示处理运行效果(如果看不到,请更新你的Flash Player播放器吧!你可以使用方向键,改变角色移动方向)

Flash效果

GameSprite类:

  1. package{  
  2. importflash.display.*;  
  3. importflash.net.*;  
  4. importflash.utils.Timer;  
  5. importflash.events.*;  
  6. importflash.geom.*;  
  7. publicclassGameSpriteextendsSprite{  
  8. privatevartimer:Timer;  
  9. privatevarsWidth:uint;  
  10. privatevarsHeight:uint;  
  11. privatevarsStep:uint;  
  12. privatevarsDirection:uint;  
  13. privatevarloader:Loader;  
  14. privatevarmaps:Array;  
  15. privatevarpointer:uint;  
  16. privatevarmap:Bitmap;  
  17. functionGameSprite(){  
  18. //角色大小;  
  19. sWidth=100;  
  20. sHeight=100;  
  21. //角色移动方向;  
  22. sDirection=0;  
  23. //角色步数;  
  24. sStep=1;  
  25. //角色动作数组;  
  26. maps=newArray();  
  27. //初始化角色动作运行指针;  
  28. pointer=0;  
  29. //初始化time;  
  30. timer=newTimer(100);  
  31. timer.addEventListener(TimerEvent.TIMER,timerHandler);  
  32. //图片加载对象;  
  33. loader=newLoader();  
  34. loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);  
  35. loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,errorHandler);  
  36. loader.load(newURLRequest("/download/sprite.png"));  
  37. stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);  
  38. }  
  39. //错误处理事件;  
  40. privatefunctionerrorHandler(event:IOErrorEvent):void{  
  41. trace("IOErrorEvent");  
  42. }  
  43. //键盘事件,通过方向键更改角色移动方向;  
  44. privatefunctionkeyDownHandler(event:KeyboardEvent):void{  
  45. switch(event.keyCode){  
  46. case40:  
  47. sDirection=0;  
  48. break;  
  49. case38:  
  50. sDirection=3;  
  51. break;  
  52. case37:  
  53. sDirection=1;  
  54. break;  
  55. case39:  
  56. sDirection=2;  
  57. break;  
  58. }  
  59. }  
  60. //定时器运行事件;  
  61. privatefunctiontimerHandler(event:Event):void{  
  62. //删除旧的角色动作图像;  
  63. if(map!=null){  
  64. removeChild(map);  
  65. }  
  66. //显示新的角色动作图像;  
  67. map=newBitmap(maps[sDirection][pointer]);  
  68. addChild(map);  
  69. //角色动作循环处理;  
  70. if(pointer<sStep-1){  
  71. pointer  ;  
  72. }else{  
  73. pointer=0;  
  74. }  
  75. }  
  76. //加载图片完成处理事件;  
  77. privatefunctioncompleteHandler(event:Event):void{  
  78. //根据图片的大小初始化BitmapData;  
  79. /*  
  80. *注意如果你要保留原来的图片的透明度的话,必将transparent设置为true,同时设置填充色值的前两位为00;  
  81. */
  82. varsBmd:BitmapData=newBitmapData(loader.width,loader.height,true,0x00FFFFFF);  
  83. sBmd.draw(loader);  
  84. //计算移动步数;  
  85. sStep=Math.floor(loader.width/sWidth);  
  86. for(varj:uint=0;j<Math.floor(loader.height/sHeight);j  ){  
  87. vararr:Array=newArray();  
  88. for(vari:uint=0;i<sStep;i  ){  
  89. varbmd:BitmapData=newBitmapData(sWidth,sHeight,true,0x00FFFFFF);  
  90. //获取单个角色的BitmapData对象;  
  91. bmd.copyPixels(sBmd,newRectangle(sWidth*i,sHeight*j,sWidth,sHeight),newPoint(0,0));  
  92. arr.push(bmd);  
  93. }  
  94. //放入角色数组里;  
  95. maps.push(arr);  
  96. }  
  97. //释放sBmd资源;  
  98. sBmd.dispose();  
  99. //开始运行角色动作;  
  100. timer.start();  
  101. }  
  102. }  
  103. }

载入外部png图片,然后使用BitmapData类非常理想,最大的问题是:从表面上看图片是透明的,但是其实图片是一个矩形,所以这个矩形区域会遮住它下面的内容,所以当你用鼠标点击这个矩形区域时,你的鼠标是在矩形区域上而不是它下面的内容(其实这就好比你把一个 movieClip的alhpa值设为0,看上去什么都没有,但是它却实实在在地存在)。所以如果你的人物是通过鼠标来操作它的行走,这个时候可能会有一些问题了。