[AS3]单个图片进行角色动作化处理【转】

转至:http://www.klstudio.com/post/119.html

package {    import flash.display.*;    import flash.net.*;    import flash.utils.Timer;    import flash.events.*;    import flash.geom.*;    public class GameSprite extends Sprite {    private var timer:Timer;    private var sWidth:uint;    private var sHeight:uint;    private var sStep:uint;    private var sDirection:uint;    private var loader:Loader;    private var maps:Array;    private var pointer:uint;    private var map:Bitmap;            function GameSprite() {    //角色大小;             sWidth = 100;                sHeight = 100;    //角色移动方向;             sDirection = 0;    //角色步数;             sStep = 1;    //角色动作数组;             maps = new Array();    //初始化角色动作运行指针;             pointer = 0;    //初始化time;             timer = new Timer(100);                timer.addEventListener(TimerEvent.TIMER, timerHandler);    //图片加载对象;             loader = new Loader();                loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);                loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);                loader.load(new URLRequest("/download/sprite.png"));                stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);            }    //错误处理事件; private function errorHandler(event:IOErrorEvent):void {                trace("IOErrorEvent");            }    //键盘事件,通过方向键更改角色移动方向; private function keyDownHandler(event:KeyboardEvent):void {    switch (event.keyCode) {    case 40 :                        sDirection = 0;    break;    case 38 :                        sDirection = 3;    break;    case 37 :                        sDirection = 1;    break;    case 39 :                        sDirection = 2;    break;                }            }    //定时器运行事件; private function timerHandler(event:Event):void {    //删除旧的角色动作图像; if (map != null) {                    removeChild(map);                }    //显示新的角色动作图像;             map = new Bitmap(maps[sDirection][pointer]);                addChild(map);    //角色动作循环处理; if (pointer < sStep-1) {                    pointer ++;                } else {                    pointer = 0;                }            }    //加载图片完成处理事件; private function completeHandler(event:Event):void {    //根据图片的大小初始化BitmapData; /*              * 注意如果你要保留原来的图片的透明度的话,必将transparent设置为true,同时设置填充色值的前两位为00;              */             var sBmd:BitmapData = new BitmapData(loader.width,loader.height,true,0x00FFFFFF);                sBmd.draw(loader);    //计算移动步数;             sStep = Math.floor(loader.width/sWidth);    for (var j:uint = 0; j<Math.floor(loader.height/sHeight); j++) {                    var arr:Array = new Array();    for (var i:uint = 0; i<sStep; i++) {                        var bmd:BitmapData = new BitmapData(sWidth,sHeight,true,0x00FFFFFF);    //获取单个角色的BitmapData对象;                     bmd.copyPixels(sBmd,new Rectangle(sWidth*i, sHeight*j, sWidth, sHeight),new Point(0,0));                        arr.push(bmd);                    }    //放入角色数组里;                 maps.push(arr);                }    //释放sBmd资源;             sBmd.dispose();    //开始运行角色动作;             timer.start();            }        }    }  

转载于:https://www.cnblogs.com/tionase/archive/2007/07/18/822150.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值