设为首页
联系我们
收藏本站
 首页
 网站建设
 网络营销
 flash动画
 服务器技术
 电子商务
 电脑技术
 体坛快报
 娱乐八卦
热门关键字:   网站建设   网站   电子商务   flash动画   是否
  >> 点击排行
·十大小说风云榜--2007年11月
·士兵突击精彩剧照
·网友最想娶的十大女星
·电子商务信用评估与信用现状
·十大帅哥风云榜--2007年11月
·十大美女风云榜---2007年11
·从基础开始深入Flash AS3教
·SetInterval的用法详解
·11月6日十大电影风云榜---中文
·电子商务论文:电子商务诚信问题及其
  >> 相关文章
·Google排名技巧十五课学习笔记
·学习CSS的伪类,WEB标准学习
·CSS常用小技巧
·DIV CSS网页布局实例:十步学
·2008奥运会中国代表团成立 10
·伊拉克被正式取消参加北京奥运会资格
·去掉网页上的Flash动画虚线框
·在Mozilla和Firefox浏
·如何防止网页 Flash 广告被屏
·手写CSS应该注意的一些技巧
  >> 推荐文章
·Flash AS3对单个图片进行角
·从基础开始深入Flash AS3教
·从基础开始深入Flash AS3教
·从基础开始深入学Flash AS3
·从基础开始深入学Flash AS3
·从基础开始深入学Flash AS3
·从基础开始深入学Flash AS3
·Flash as3、Flex与as
·浅释ActionScript的代码
·浅释Flash ActionScr
 当前位置 → 攀登学习资源网flash动画action应用 → 浏览正文
Flash AS3对单个图片进行角色动作化处理
作者:xiao1xiao    来源:闪吧个人空间    点击数:   更新时间:2007年10月31日 【字体: 】       

大家肯定看过大型游戏一张各个人物动作图片继承在一张位图上的程序吧~现在看看这个!

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

    提问者提供一个角色动作图片,我也就在就直接用这图片了!

点此在新窗口浏览图片

演示处理运行效果(如果看不到,请更新你的Flash Player播放器吧!你可以使用方向键,改变角色移动方向)

Flash效果
GameSprite类:

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();   
        }   
    }   
}  

载入外部png图片,然后使用BitmapData类非常理想,最大的问题是:从表面上看图片是透明的,但是其实图片是一个矩形,所以这个矩形区域会遮住它下面的内容,所以当你用鼠标点击这个矩形区域时,你的鼠标是在矩形区域上而不是它下面的内容(其实这就好比你把一个 movieClip的alhpa值设为0,看上去什么都没有,但是它却实实在在地存在)。所以如果你的人物是通过鼠标来操作它的行走,这个时候可能会有一些问题了。

上一篇:没有了      下一篇从基础开始深入Flash AS3教程(1)(译文)
Tags:网站建设 flash动画
关于我们 | 服务条款 | 免责声明 | 友情链接
陕ICP备08001548号 版权所有 Copyright © 2007-2010 panda851 All Rights Reserved
panda851.com 攀登学习网