a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 辦公 > Flash > 正文

Flash AS3對單個圖片進行角色動作化處理

2020-07-17 13:20:31
字體:
供稿:網(wǎng)友

大家肯定看過大型游戲一張各個人物動作圖片繼承在一張位圖上的程序吧~現(xiàn)在看看這個!

我今天在藍色論壇里看到一個有關"BitmapData類"的問題,我覺得用BitmapData類是可以實現(xiàn)里說的C 處理圖片功能,再加我好久沒寫AS3的程序,都快生銹了!就當練練手吧!我查了一下Flash幫助文件,整理一下思路花了中午時間寫出下面document類文件;這個功能比較適合做Flash游戲開發(fā)了。我加了鍵盤事件,用來控制角色移動方向。如果在對類代碼中使用的類對象不清楚的話,請看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. //角色步數(shù);
  24. sStep=1;
  25. //角色動作數(shù)組;
  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. //角色動作循環(huán)處理;
  70. if(pointer<sStep-1){
  71. pointer ;
  72. }else{
  73. pointer=0;
  74. }
  75. }
  76. //加載圖片完成處理事件;
  77. privatefunctioncompleteHandler(event:Event):void{
  78. //根據(jù)圖片的大小初始化BitmapData;
  79. /*
  80. *注意如果你要保留原來的圖片的透明度的話,必將transparent設置為true,同時設置填充色值的前兩位為00;
  81. */
  82. varsBmd:BitmapData=newBitmapData(loader.width,loader.height,true,0x00FFFFFF);
  83. sBmd.draw(loader);
  84. //計算移動步數(shù);
  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. //放入角色數(shù)組里;
  95. maps.push(arr);
  96. }
  97. //釋放sBmd資源;
  98. sBmd.dispose();
  99. //開始運行角色動作;
  100. timer.start();
  101. }
  102. }
  103. }

載入外部png圖片,然后使用BitmapData類非常理想,最大的問題是:從表面上看圖片是透明的,但是其實圖片是一個矩形,所以這個矩形區(qū)域會遮住它下面的內(nèi)容,所以當你用鼠標點擊這個矩形區(qū)域時,你的鼠標是在矩形區(qū)域上而不是它下面的內(nèi)容(其實這就好比你把一個 movieClip的alhpa值設為0,看上去什么都沒有,但是它卻實實在在地存在)。所以如果你的人物是通過鼠標來操作它的行走,這個時候可能會有一些問題了。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄色毛片在线看 | 欧美2区 | 男人的午夜 | 久久久久久久中文 | 国产毛片在线 | 久久精品国产精品青草 | 国产高清不卡一区二区三区 | 黄色日本片 | 国产精品国色综合久久 | 久久综合精品视频 | 国产成人精品a视频 | av在线免费观看一区二区 | 91网站免费 | 欧美三区 | 国产精品久久久久久久久久三级 | 日韩精品资源 | 亚洲一区二区三区四区在线观看 | 欧美日韩一区二区视频在线观看 | 网址你懂的 | 97电影在线观看 | 黄色在线资源 | 亚洲一区电影 | 免费av电影在线观看 | 亚洲视频在线观看一区二区三区 | 国产免费一区二区三区 | 国产一区二区三区在线视频 | 亚洲国产aⅴ成人精品无吗 亚洲h | 日批视频免费 | 日韩视频免费在线观看 | 特级理论片 | 久久久久91 | 亚洲成人av在线 | 色九九 | 日韩综合网 | www.伊人网 | 免费黄色在线 | 国产成人a亚洲精品 | 中文字幕观看 | baoyu133. con永久免费视频 | 国产成人精品亚洲777人妖 | 在线日韩一区 |