[转]让子弹飞,图片缓冲应用

[url]http://www.cnblogs.com/heycup/archive/2011/01/25/1944704.html[/url]

今天看到同学讲到图片缓冲的应用,原文(http://bbs.9ria.com/thread-61328-1-2.html)
看了下代码,发现还有改进的余地,特地自己实现了一把

改进的地方:改进beginBitmapFill为位图,这个比较耗,用vector代替arrary
不再传递buffer及位图,数据和具体显示分离
简化了部分代码

下面是具体效果

package {

/**
* 运动物品类
* @author heycup@gmail.com
*/
public class MoveObject {
public var x:int;
public var y:int;
public var sx:int;
public var sy:int;

public function update():void {
x += sx;
y += sy;
if (x > BitmapBufferTest.w || x < 0){
sx = -sx;
}
if (y > BitmapBufferTest.h || y < 0){
sy = -sy;
}
}
}
}


package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Point;

/**
* ...
* @author heycup@gmail.com
*/
public class BitmapBufferTest extends Sprite {
public static var w:int = 600;
public static var h:int = 400;

private var objects:Vector.<MoveObject> = new Vector.<MoveObject>();
private var maxNum:uint = 5000;
private var bmd:BitmapData;

//嵌入子弹图片
[Embed(source='../bin/zhidan.png')]
private var ZhiDan:Class;
private var zhidanBmd:BitmapData;

public function BitmapBufferTest(){
init();
}

private function init():void {
//获取子弹的bitmapdata
var zhidan:Bitmap = new ZhiDan();
zhidanBmd = zhidan.bitmapData;

//实例buffer
bmd = new BitmapData(w, h, false, 0x000000);
var bitmap:Bitmap = new Bitmap(bmd);
addChild(bitmap);

//实例大量子弹运动类
for (var i:int = 0; i < maxNum; i++){
var moveObject:MoveObject = new MoveObject();
moveObject.x = w * Math.random();
moveObject.y = h * Math.random();
moveObject.sx = Math.random() * 5 + 1;
moveObject.sy = Math.random() * 5 + 1;
objects.push(moveObject);
}
//开始运动
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}

private function onEnterFrame(e:Event):void {
bmd.fillRect(bmd.rect, 0x000000);
for (var i:int = 0, n:int = objects.length; i < n; i++){
var item:MoveObject = objects[i];
bmd.copyPixels(zhidanBmd, zhidanBmd.rect, new Point(item.x, item.y));
item.update();
}
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值