由于AS3的推出和网速的提高~~
用Flash来实现网络游戏已经成为可能..
今天来讨论一下一般RPG中常见的人物走动的实现方法...
一般的人物走动..都是由一组连续的动作组成...
像下面的图片:
开发中的人物走动实现方法-unity3d 实现人物走动">
实际操作过程有两种~~一种是把图片分割成很多的小块
另一种是用mask只显示需要的区域~然后用移动图片的方式来处理..
我们先说说第一种方法..
拿上面的图片为例
一、把资源图片通过任何方式加载进swf并生成bitmap对象
二、根据单个动作的宽度和高度生成单独的bitmapData对象的数组
三、通用Timer或EntarFrame等方式循环显示每个动作
- //Copyright 2008. Http://L4cd.Net All Rights Reserved.
- package
- {
- import flash.display.Bitmap;
- import flash.display.BitmapData;
- import flash.display.Sprite;
- import flash.events.TimerEvent;
- import flash.geom.Matrix;
- import flash.geom.Rectangle;
- import flash.utils.Timer;
- [SWF(width="80", height="91", backgroundColor="#ffffff", frameRate="24")]
- public class Run extends Sprite
- {
- [Embed(source="0002.png")]
- private var Png002:Class;
- private var m:Bitmap;
- private var w:Number = 80;//单动作宽度
- private var h:Number = 91;//单动作高度
- private var c:Number = 8;//动作数
- private var bmp:Array;
- public function Run()
- {
- m = new Png002() as Bitmap;
- bmp = [];
- for(var i:uint=0;i<8;i++)
- {
- var bit:BitmapData = new BitmapData(80,91);
- var mx:Matrix = new Matrix();
- mx.tx = -i*w;
- bit.draw(m,mx,null,null,new Rectangle(0,0,w,h));
- bmp.push(bit);
- }
- m.bitmapData = null
- addChild(m)
- var timer:Timer = new Timer(50);
- timer.addEventListener(TimerEvent.TIMER,frame);
- timer.start();
- }
- private function frame(e:TimerEvent):void
- {
- bmp.push(bmp.shift());
- m.bitmapData = bmp[0];
- }
- }
- }
上面的代码运行结果如下:
时间: 2024-10-30 15:38:14