`

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

阅读更多
http://www.cnblogs.com/heycup/archive/2011/01/25/1944704.html

今天看到同学讲到图片缓冲的应用,原文(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();
			}
		}
	}
}



分享到:
评论

相关推荐

    pygame之《飞机大战》图片和音乐

    碰撞检测可以帮助判断飞机与敌机或子弹的碰撞,定时器可以控制游戏节奏,如限制射击频率,动画制作则是通过连续显示一系列图片来实现动态效果。 总的来说,这个资源包提供了开发一个简单但完整的2D飞机射击游戏的...

    WIN32GDI双缓冲打螃蟹小游戏

    双缓冲技术是解决窗口应用程序中图形更新问题的一种方法,特别是在进行连续动画或快速绘图时,可以避免屏幕闪烁和图像残影。在双缓冲中,我们首先在内存中的一个“后台缓冲区”上完成所有的绘图操作,然后一次性将这...

    飞机大战.rar

    Graphics类提供了绘制基本图形、文字和图片的方法,开发者可以通过它在窗口上绘制飞机、敌人、子弹等游戏元素。为了实现流畅的动画效果,开发者可能采用了重绘(Repaint)机制。当游戏状态发生变化时,如飞机移动、...

    java版本的飞机大战

    - 渲染优化:避免不必要的重绘,使用缓冲技术提高渲染效率。 7. **存档和加载** - 如果游戏支持保存进度,需要实现数据持久化,可以使用`java.io`包中的类来存储和读取游戏状态。 8. **多线程** - 游戏的主循环...

    C#飞机大战

    1. 图片资源的加载与释放:游戏中的图像通常以位图或精灵的形式存储,C#可以使用GDI+库进行加载和绘制。在不使用时,应正确释放资源以避免内存泄漏。 2. 音效和音乐的管理:游戏可能包含多种音效和背景音乐,使用...

    android飞机大战雷电源码

    SurfaceView提供了双缓冲机制,确保了游戏画面流畅性,而GLSurfaceView则支持OpenGL ES图形库,用于创建复杂的3D效果。 2. 游戏循环:游戏的核心在于主循环(game loop),它负责处理游戏的逻辑、渲染画面以及接收...

    Java飞机大战游戏数据库设计及源码

    4. **多线程**:为了实现游戏的流畅运行,Java的多线程特性可能会被应用。例如,游戏逻辑和用户输入处理可能在一个线程上进行,而图像渲染可能在另一个线程上,避免阻塞。 5. **对象和类的设计**:游戏中的飞机、...

    MFC版飞机大战 程序设计实验报告

    - **双缓冲技术**:避免屏幕闪烁,提高游戏画面的流畅性。 - **内存释放技术**:确保程序运行结束后,正确释放分配的内存,防止内存泄漏。 3. 总体设计与详细设计 - **系统模块划分**:游戏被分为用户界面模块、...

    Android应用源码之飞行射击类游戏源码-IT计算机-毕业设计.zip

    在Android应用开发领域,飞行射击类游戏源码是一种常见的项目类型,它可以帮助开发者深入理解游戏开发的各个环节。这款源码适合计算机科学与技术、软件工程等专业的学生进行毕业设计,以便提升他们的移动应用开发...

    c++mfc飞行小游戏带课程设计带源码

    C++ MFC(Microsoft Foundation Classes)是微软提供的一套面向对象的类库,用于构建Windows应用程序。MFC基于C++,它封装了Windows API,使得开发者能够更加便捷地进行Windows编程。在这个项目中,我们主要探讨的是...

    DirectDraw飞机小游戏源码

    这个"DirectDraw飞机小游戏源码"提供了一个经典的案例,让我们深入理解DirectDraw在游戏编程中的应用。 首先,`A10.001`可能是一个程序资源文件,通常包含游戏中的图片、声音或其他媒体资源。`SCRIPT1.APS`可能是一...

    java写的飞机大战小游戏.zip

    Java作为一种强大的面向对象的编程语言,因其跨平台性和丰富的类库,常被用于开发各种类型的应用程序,包括游戏。本篇将深入探讨一款名为“飞机大战”的Java游戏项目,该项目源码适合作为毕业设计、课程设计的实践...

    java打飞机小游戏

    这款游戏展示了Java在游戏开发中的应用,虽然可能在某些方面还不够成熟和完善,但它的源代码提供了一个很好的学习和实践平台,让开发者可以了解游戏开发的基本流程和技巧。 在Java编程中,打飞机游戏的核心原理主要...

    GDI+游戏GDI+游戏GDI+游戏GDI+游戏GDI+游戏GDI+游戏

    GDI+(Graphics Device Interface Plus)是Windows操作系统中用于图形绘制和图像处理的一个高级API,它是.NET Framework的一部分,尤其在C#编程中被广泛应用于创建图形界面和游戏开发。在这个"飞机大战"的小游戏中,...

    基于Java的单机版2D飞机大战小游戏.zip

    《基于Java的单机版2D飞机大战小游戏》是一个由Java编程语言开发的简单2D游戏,它展示了Java在游戏开发中的应用。这个游戏的核心特点包括玩家控制的飞机与敌机的交互、碰撞检测、得分系统以及游戏循环。下面将详细...

    3D飞行射击游戏——源代码

    《3D飞行射击游戏——源代码》是一款基于...通过分析并实践这款《3D飞行射击游戏——源代码》,开发者不仅能深入了解DirectX 9.0的应用,还能掌握游戏开发的基本流程和技巧,为自己的游戏开发之路打下坚实的基础。

    全民飞机大战小游戏素材

    为了优化,可以采用以下策略:预加载常用资源、使用缓冲技术减少重复绘制、考虑使用轻量级的图像格式或者压缩图片降低内存占用。 5. **动画制作**:在全民飞机大战中,飞机、敌人、子弹等可能都需要动画效果。Java...

    html5模仿微信打飞机游戏源码

    此外,可能还有图片资源文件夹,存放游戏中的各种图片素材。 学习这个源码,开发者不仅可以掌握HTML5游戏开发的基本流程,还能深入理解Canvas绘图、JavaScript事件处理、音频操作以及优化技巧。这对于想要从事HTML5...

    Java游戏开发项目及游戏源码.doc

    2. 图像资源管理:使用外部文件引入图片,MIDP2.0的游戏包提供了解决静态和动态图像、双缓冲屏幕刷新等方法。 3. 智能行为实现:玩家飞机通过键盘控制,敌机则需要有预设的运行算法以增加挑战性。 4. 子弹碰撞检测:...

    C#打飞机游戏代码

    C#的垃圾回收机制可以自动管理一部分资源,但开发者仍需注意手动管理如纹理、音频缓冲等非托管资源。 8. **音效与音乐**:C#支持集成各种音频库,用于播放背景音乐和音效。这些库提供API来控制音频的播放、暂停和...

Global site tag (gtag.js) - Google Analytics