基于BitmapData的动画

前一段时间写了一个 回合制游戏的战斗画面

里面用到了 基于BitmapData的战斗动画 今天闲来无事 把以前的程序找出来

 

修改后 单独写了人物跑动的动画程序  网上的游戏素材少的可怜 自己截了一个 名将的序列图片

然后用 BitmapData的copyPixels方法进行截取后 实现了动画

 

图片如下

 

 

 

代码如下

  1. package com.my.game  
  2. {  
  3.     import flash.display.BitmapData;  
  4.     import flash.display.DisplayObject;  
  5.     import flash.display.Sprite;  
  6.     import flash.events.Event;  
  7.     import flash.events.IEventDispatcher;  
  8.     import flash.geom.Point;  
  9.     import flash.geom.Rectangle;  
  10.     import flash.utils.getTimer;  
  11.       
  12.       
  13.     public class Element extends Sprite   
  14.     {  
  15.           
  16.         [Bindable]  
  17.         [Embed(source="/FlexTest/bin-debug/resources/image.png")]  
  18.         private var _ElementImage:Class;  
  19.           
  20.         private var ElementImage:BitmapData;  
  21.         private var sourceElementImage:BitmapData;  
  22.           
  23.         private var timer:int = 0;  
  24.         private var frame:int = 0;  
  25.       
  26.         public var running:Boolean = false;  
  27.           
  28.         public function Element()  
  29.         {  
  30.             super();  
  31.             var d:DisplayObject = new _ElementImage() as DisplayObject;  
  32.             sourceElementImage = new BitmapData(d.width,d.height,true);  
  33.             sourceElementImage.draw(d);  
  34.             ElementImage = new BitmapData(100,111,true);  
  35.             timer = getTimer();  
  36.             //加入一个监听  
  37.             this.addEventListener(Event.ENTER_FRAME, Run);  
  38.         }  
  39.           
  40.         private function Run(event:Event):void  
  41.         {  
  42.             //判断是否跑动  
  43.             if(running)  
  44.             {  
  45.                 //80毫秒一帧  
  46.                 if(getTimer()-timer>80)  
  47.                 {  
  48.                     if(frame>5) frame=0;  
  49.                     redraw(new Rectangle(frame*100,0,100,111));  
  50.                     timer = getTimer();  
  51.                     frame++;  
  52.                       
  53.                     //判断是否跑出600像素外  
  54.                     if(this.x<600)  
  55.                     {  
  56.                         this.x +=15;  
  57.                     }  
  58.                     else  
  59.                     {  
  60.                         this.x = 0;  
  61.                     }  
  62.                 }  
  63.             }  
  64.               
  65.         }  
  66.           
  67.         private function redraw(rect:Rectangle):void  
  68.         {  
  69.             ElementImage.copyPixels(sourceElementImage,rect,new Point(0,0),null,null,false);  
  70.             this.graphics.clear();  
  71.             this.graphics.beginBitmapFill(ElementImage, nullfalsefalse);  
  72.             this.graphics.drawRect(0, 0, 100, 111);  
  73.             this.graphics.endFill();  
  74.         }  
  75.     }  
  76. }  

 

最后在FLEX4中 调用这个Sprite  没办法 没玩过FLASH CS系列 只能用FLEX4 对付下了

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"   
  3.                xmlns:s="library://ns.adobe.com/flex/spark"   
  4.                xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"  
  5.                creationComplete="application1_creationCompleteHandler(event)"  
  6.                frameRate="40"  
  7.                >  
  8.     <s:layout>  
  9.         <s:BasicLayout/>  
  10.     </s:layout>  
  11.     <fx:Script>  
  12.         <!--[CDATA[  
  13.             import com.my.game.Element;  
  14.             import mx.events.FlexEvent;  
  15.             private var e:Element = new Element();  
  16.   
  17.             protected function application1_creationCompleteHandler(event:FlexEvent):void  
  18.             {  
  19.                 sp.addChild(e);  
  20.             }  
  21.   
  22.   
  23.             protected function button1_clickHandler(event:MouseEvent):void  
  24.             {  
  25.                 if(event.currentTarget.label=="Run")  
  26.                 {  
  27.                     e.running = true;  
  28.                     event.currentTarget.label="Stop";  
  29.                 }  
  30.                 else  
  31.                 {  
  32.                     e.running = false;  
  33.                     event.currentTarget.label="Run";  
  34.                 }  
  35.             }  
  36.               
  37.   
  38.         ]]-->  
  39.     </fx:Script>  
  40.     <fx:Declarations>  
  41.         <!-- 将非可视元素(例如服务、值对象)放在此处 -->  
  42.     </fx:Declarations>  
  43.     <s:SpriteVisualElement id="sp">  
  44.           
  45.     </s:SpriteVisualElement>  
  46.     <s:Button x="27" y="155" label="Run" click="button1_clickHandler(event)"/>  
  47. </s:Application>  
posted @ 2011-10-07 01:08  rob_2010  阅读(359)  评论(0)    收藏  举报