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

ActionScript
FLASH AS3与网页JS参数值传递的问题
Flash AS3的parameters对象处理网页参数
Flash教程 认识Flash ActionScript的环境
Flash ActionScript编程基础
Flash AS3代码实现鼠标跟随喷枪涂鸦效果
falsh 跨域调用配置
Flash AS3.0 实例教程 喷泉动画特效
AS3 Loader与URLLoader的比较
ColorTransform类调整显示对象的颜色值
Flash AS3 快速制作烟雾动画
Flash AS3 制作文字飞出动画
ActionScript 学习小心得
ActionScript3.0读取网页FlashVars中的参数的问题
通过实例学习AS3.0:案例三
通过实例学习Flash AS3.0:案例四
通过实例学习Flash AS3.0:案例五
通过实例学习Flash AS3.0:案例六
Flash教程:认识Flash ActionScript的环境
Flash as入门(1):认识AS面板
Flash as入门(3):AS基本语法

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-16   浏览: 95 ::
收藏到网摘: 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,看上去什么都没有,但是它却实实在在地存在)。所以如果你的人物是通过鼠标来操作它的行走,这个时候可能会有一些问题了。