论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash AS编程教程
Tag:2.0,3.0菜鸟,游戏,,cs,技巧,源码,,文本,文字,函数,音乐,随机,拖拽,asp,access,xml,mc,视频教程

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

文章类别:Flash AS编程 | 发表日期:2008-10-6 17:36:06


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

 

GameSprite类
  1. package {   
  2.     import flash.display.*;   
  3.     import flash.net.*;   
  4.     import flash.utils.Timer;   
  5.     import flash.events.*;   
  6.     import flash.geom.*;   
  7.   
  8.     public class GameSprite extends Sprite {   
  9.         private var timer:Timer;   
  10.         private var sWidth:uint;   
  11.         private var sHeight:uint;   
  12.         private var sStep:uint;   
  13.         private var sDirection:uint;   
  14.         private var loader:Loader;   
  15.         private var maps:Array;   
  16.         private var pointer:uint;   
  17.         private var map:Bitmap;   
  18.         function GameSprite() {   
  19.             //角色大小;   
  20.             sWidth = 100;   
  21.             sHeight = 100;   
  22.             //角色移动方向;   
  23.             sDirection = 0;   
  24.             //角色步数;   
  25.             sStep = 1;   
  26.             //角色动作数组;   
  27.             maps = new Array();   
  28.             //初始化角色动作运行指针;   
  29.             pointer = 0;   
  30.             //初始化time;   
  31.             timer = new Timer(100);   
  32.             timer.addEventListener(TimerEvent.TIMER, timerHandler);   
  33.             //图片加载对象;   
  34.             loader = new Loader();   
  35.             loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);   
  36.             loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);   
  37.             loader.load(new URLRequest("/download/sprite.png"));   
  38.   
  39.             stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);   
  40.         }   
  41.         //错误处理事件;   
  42.         private function errorHandler(event:IOErrorEvent):void {   
  43.             trace("IOErrorEvent");   
  44.   
  45.         }   
  46.         //键盘事件,通过方向键更改角色移动方向;   
  47.         private function keyDownHandler(event:KeyboardEvent):void {   
  48.             switch (event.keyCode) {   
  49.                 case 40 :   
  50.                     sDirection = 0;   
  51.                     break;   
  52.                 case 38 :   
  53.                     sDirection = 3;   
  54.                     break;   
  55.                 case 37 :   
  56.                     sDirection = 1;   
  57.                     break;   
  58.                 case 39 :   
  59.                     sDirection = 2;   
  60.                     break;   
  61.             }   
  62.   
  63.         }   
  64.         //定时器运行事件;   
  65.         private function timerHandler(event:Event):void {   
  66.             //删除旧的角色动作图像;   
  67.             if (map != null) {   
  68.                 removeChild(map);   
  69.             }   
  70.             //显示新的角色动作图像;   
  71.             map = new Bitmap(maps[sDirection][pointer]);   
  72.             addChild(map);   
  73.             //角色动作循环处理;   
  74.             if (pointer < sStep-1) {   
  75.                 pointer ++;   
  76.             } else {   
  77.                 pointer = 0;   
  78.             }   
  79.         }   
  80.         //加载图片完成处理事件;   
  81.         private function completeHandler(event:Event):void {   
  82.             //根据图片的大小初始化BitmapData;   
  83.             /*  
  84.              * 注意如果你要保留原来的图片的透明度的话,必将transparent设置为true,同时设置填充色值的前两位为00;  
  85.              */  
  86.             var sBmd:BitmapData = new BitmapData(loader.width,loader.height,true,0x00FFFFFF);   
  87.             sBmd.draw(loader);   
  88.             //计算移动步数;   
  89.             sStep = Math.floor(loader.width/sWidth);   
  90.             for (var j:uint = 0; j<Math.floor(loader.height/sHeight); j++) {   
  91.                 var arr:Array = new Array();   
  92.                 for (var i:uint = 0; i<sStep; i++) {   
  93.                     var bmd:BitmapData = new BitmapData(sWidth,sHeight,true,0x00FFFFFF);   
  94.                     //获取单个角色的BitmapData对象;   
  95.                     bmd.copyPixels(sBmd,new Rectangle(sWidth*i, sHeight*j, sWidth, sHeight),new Point(0,0));   
  96.                     arr.push(bmd);   
  97.                 }   
  98.                 //放入角色数组里;   
  99.                 maps.push(arr);   
  100.             }   
  101.             //释放sBmd资源;   
  102.             sBmd.dispose();   
  103.             //开始运行角色动作;   
  104.             timer.start();   
  105.         }   
  106.     }   
  107. }  
上一篇:{实例}游戏界面制作 人气:2815
下一篇:{实例}游戏设计原理 人气:3201
视频教程列表
文章教程搜索
 
Flash AS推荐教程
Flash AS热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058