打印

[应用] bitmapdata类

能不能象C++那样处理png连图,就是把下面这个图里面的不同动作连成动画,用bitmapdata行吗?这个类不怎么熟悉``应该怎么做`
这个~FLASH的老本行啊
时间轴里挨着塞进去就是了
发布成SWF/GIF都可以

如果楼主是说要自动把绘好的大图组织成动画那也是完全可以的
用BitmapData.copyPixels()方法

[ 本帖最后由 xbstu2006 于 2007-4-28 23:21 编辑 ]
忘了说看到楼主的猴子很可爱,啥时能跟楼主学两下多好?
做动画不会写AS找偶
不是我画的,QQ堂提取的,就是不了解bitmapdata类啊,只知道可以操纵象素,
能不能写个例子,BitmapData.copyPixels()有哪些参数

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
其实也不需要bmp类,用遮罩就可以,
这种类型我在05年就试过了

TOP

下面可以实现你说的功能
演示效果,请看
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();
        }
    }
}
Kinglong 's Blog
专注研究Flash,FCS/FMS,CF,JS,AS,Java,C#等相关技术

TOP

太感谢kinglong了

TOP

六楼大虾的那个做得很不错啊,

TOP

这贴应该移到AS3区里呀...

问下,达人写的效果...你现在是方向键按下只是控制方向,我想方向键松开时,人物就停止行走,是不是再加个"KEY_UP"就行了啊...
望尘莫及。。。

TOP