基于BitmapData的动画
前一段时间写了一个 回合制游戏的战斗画面
里面用到了 基于BitmapData的战斗动画 今天闲来无事 把以前的程序找出来
修改后 单独写了人物跑动的动画程序 网上的游戏素材少的可怜 自己截了一个 名将的序列图片
然后用 BitmapData的copyPixels方法进行截取后 实现了动画
图片如下

代码如下
- package com.my.game
- {
- import flash.display.BitmapData;
- import flash.display.DisplayObject;
- import flash.display.Sprite;
- import flash.events.Event;
- import flash.events.IEventDispatcher;
- import flash.geom.Point;
- import flash.geom.Rectangle;
- import flash.utils.getTimer;
- public class Element extends Sprite
- {
- [Bindable]
- [Embed(source="/FlexTest/bin-debug/resources/image.png")]
- private var _ElementImage:Class;
- private var ElementImage:BitmapData;
- private var sourceElementImage:BitmapData;
- private var timer:int = 0;
- private var frame:int = 0;
- public var running:Boolean = false;
- public function Element()
- {
- super();
- var d:DisplayObject = new _ElementImage() as DisplayObject;
- sourceElementImage = new BitmapData(d.width,d.height,true);
- sourceElementImage.draw(d);
- ElementImage = new BitmapData(100,111,true);
- timer = getTimer();
- //加入一个监听
- this.addEventListener(Event.ENTER_FRAME, Run);
- }
- private function Run(event:Event):void
- {
- //判断是否跑动
- if(running)
- {
- //80毫秒一帧
- if(getTimer()-timer>80)
- {
- if(frame>5) frame=0;
- redraw(new Rectangle(frame*100,0,100,111));
- timer = getTimer();
- frame++;
- //判断是否跑出600像素外
- if(this.x<600)
- {
- this.x +=15;
- }
- else
- {
- this.x = 0;
- }
- }
- }
- }
- private function redraw(rect:Rectangle):void
- {
- ElementImage.copyPixels(sourceElementImage,rect,new Point(0,0),null,null,false);
- this.graphics.clear();
- this.graphics.beginBitmapFill(ElementImage, null, false, false);
- this.graphics.drawRect(0, 0, 100, 111);
- this.graphics.endFill();
- }
- }
- }
最后在FLEX4中 调用这个Sprite 没办法 没玩过FLASH CS系列 只能用FLEX4 对付下了
- <?xml version="1.0" encoding="utf-8"?>
- <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
- xmlns:s="library://ns.adobe.com/flex/spark"
- xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
- creationComplete="application1_creationCompleteHandler(event)"
- frameRate="40"
- >
- <s:layout>
- <s:BasicLayout/>
- </s:layout>
- <fx:Script>
- <!--[CDATA[
- import com.my.game.Element;
- import mx.events.FlexEvent;
- private var e:Element = new Element();
- protected function application1_creationCompleteHandler(event:FlexEvent):void
- {
- sp.addChild(e);
- }
- protected function button1_clickHandler(event:MouseEvent):void
- {
- if(event.currentTarget.label=="Run")
- {
- e.running = true;
- event.currentTarget.label="Stop";
- }
- else
- {
- e.running = false;
- event.currentTarget.label="Run";
- }
- }
- ]]-->
- </fx:Script>
- <fx:Declarations>
- <!-- 将非可视元素(例如服务、值对象)放在此处 -->
- </fx:Declarations>
- <s:SpriteVisualElement id="sp">
- </s:SpriteVisualElement>
- <s:Button x="27" y="155" label="Run" click="button1_clickHandler(event)"/>
- </s:Application>

浙公网安备 33010602011771号