`

Bitmap 海浪实现方式

 
阅读更多

Bitmap 海浪实现方式

 

package
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.filters.DisplacementMapFilter;
	import flash.geom.Point;
	import flash.utils.getTimer;
	
	import tween.EasyTween;
	
	public class Test2 extends Sprite
	{
//		[Embed(source="_preset.png")]
		[Embed(source="sea.png")]
		public var waterBitmapCls:Class;
		
		private var refractTmpBitmap:Bitmap;
		private var refractBmData:BitmapData;
		private var refractDisplaceFilter:DisplacementMapFilter;
		private var woBitmapData:BitmapData;
		private var perlinOffsetPoint:Point = new Point();
		
		private var perlinOffset:Array = [];
		private var filterArray:Array;
		
		private var p:Point = new Point(10, 200);
		
		private var _waveLayer:Sprite;
		private var _shipLayer:Sprite;
		private var _s:AAA;
		
		public static const WATERSIZE:int = 300;
		
		public function Test2()
		{
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
			
//			var bbb:BitmapData = new BitmapData(WATERSIZE, WATERSIZE);
//			bbb.perlinNoise(150, 150, 1, 50, true, true, 7, true, this.perlinOffset);
//			
//			var bb:Bitmap = new Bitmap(bbb);
//			addChild(bb);
//			return;
			
			this.refractTmpBitmap = new waterBitmapCls();
			this.refractBmData = new BitmapData(WATERSIZE, WATERSIZE);
			
			this.refractDisplaceFilter = new DisplacementMapFilter(this.refractBmData, new Point(0, 0), 1, 2, 10, 20);
			this.woBitmapData = this.refractTmpBitmap.bitmapData.clone();

			this.perlinOffsetPoint.x = 0;
			this.perlinOffsetPoint.y = 0;
			
			this.perlinOffset = [this.perlinOffsetPoint];
			this.filterArray = [this.refractDisplaceFilter];
			
			generateWater = true;
			this.addEventListener(Event.ENTER_FRAME, enterframeHandler);
			
			for(var i:int = 0; i < 4; i++)
			{
				for(var j:int = 0; j < 4; j++)
				{
					var b:Bitmap = new Bitmap(woBitmapData);
					b.x = i * WATERSIZE;
					b.y = j * WATERSIZE;
					this.addChild(b);
				}
			}
			
			_waveLayer = new Sprite();
			addChild(_waveLayer);
			_shipLayer = new Sprite();
			addChild(_shipLayer);
			
			_s = new AAA();
			_shipLayer.addChild(_s);
			
			var l:Shape = new Shape();
			l.graphics.lineStyle(1, 0xFF0000);
			l.graphics.moveTo(WATERSIZE, 100);
			l.graphics.lineTo(WATERSIZE, WATERSIZE);
			stage.addChild(l);
		}
		
		private var _t:int = getTimer();
		private var generateWater:Boolean = false;
		private var waterIndex:int = 0;
		private var waterTiles:Vector.<BitmapData> = new Vector.<BitmapData>();
		private var waterDirection:int = -1;
		
		private static var waterTileAmount:int = 32;
		
		private function enterframeHandler(e:*):void
		{
//			this.removeEventListener(Event.ENTER_FRAME, enterframeHandler);
			
			var v:Number = 2;//Math.sin(getTimer()) + 10;
			this.perlinOffsetPoint.x = this.perlinOffsetPoint.x + v;
			this.perlinOffsetPoint.y = this.perlinOffsetPoint.y - v;
			
			this.refractBmData.perlinNoise(80, 80, 1, 50, true, true, 7, true, this.perlinOffset);
			this.refractTmpBitmap.filters = this.filterArray;
			
			this.woBitmapData.lock();
			this.woBitmapData.draw(this.refractTmpBitmap);
			this.woBitmapData.unlock();
			
//			if(generateWater)
//			{
//				var v:Number = 2;//Math.sin(getTimer()) + 10;
//				this.perlinOffsetPoint.x = this.perlinOffsetPoint.x + v;
//				this.perlinOffsetPoint.y = this.perlinOffsetPoint.y - v;
//				
//				this.refractBmData.perlinNoise(80, 80, 1, 50, true, true, 7, true, this.perlinOffset);
//				this.refractTmpBitmap.filters = this.filterArray;
//				
//				this.woBitmapData.lock();
//				this.woBitmapData.draw(this.refractTmpBitmap);
//				this.woBitmapData.unlock();
//				
//				var bitmapData2:BitmapData = this.woBitmapData.clone();
//				
//				this.waterTiles[this.waterIndex] = bitmapData2;
//				waterIndex++;
//				if(waterIndex > waterTileAmount)
//				{
//					generateWater = false;
//					waterDirection = -1;
//				}
//			}
//			else
//			{
//				waterIndex += waterDirection;
//				
//				if (this.waterIndex >= waterTileAmount)
//				{
//					this.waterIndex = waterTileAmount;
//					this.waterDirection = -1;
//				}
//				else if (this.waterIndex <= 0)
//				{
//					this.waterIndex = 0;
//					this.waterDirection = 1;
//				}
//				
//				var bitmapData3:BitmapData = this.waterTiles[waterIndex];
//				this.woBitmapData.copyPixels(bitmapData3, bitmapData3.rect, new Point());
//			}
			
//			this.refractTmpBitmap.bitmapData.applyFilter(this.woBitmapData, this.woBitmapData.rect, new Point(), refractDisplaceFilter);
//			this.woBitmapData.copyPixels(this.refractTmpBitmap.bitmapData, this.refractTmpBitmap.bitmapData.rect, new Point());
		
//			var dltaT:int = getTimer() - _t;
			EasyTween.updateAll(33);
		
//			p.x += 2;
			
			_s.x = this.mouseX;
			_s.y = this.mouseY;
			Wave.playWave(_s.x, _s.y, _waveLayer);
		}
	}
}

 



 

 

  • 大小: 376.2 KB
分享到:
评论

相关推荐

    Bitmap方法C语言实现

    Bitmap方法C语言实现,支持插入、删除和查找功能。

    c# 实现位图算法(BitMap)

    C# 实现位图算法(BitMap) 位图算法(BitMap)是一种高效的数据结构,主要用于快速查询和存储大规模数据。下面将详细介绍 C# 中如何实现位图算法(BitMap)。 什么是 BitMap BitMap 的基本思想就是用一个 bit 位...

    bitmap实现测试

    bitmap是个省空间的数据结构,我的c实现

    Transparent Bitmap实现透明的位图(7KB)

    本文将围绕“Transparent Bitmap实现透明的位图”这一主题,详细介绍透明位图的概念、实现方式以及在不同编程环境中的应用。 首先,透明位图的核心是透明度通道(Alpha Channel)。在标准的RGB颜色模型中,每个像素...

    Linux中软件RAID的Bitmap功能实现分析.pdf

    总的来说,Linux内核2.6.18版本中的Bitmap功能是软件RAID实现的一个重要进步,它优化了RAID5的性能并提升了数据安全性。通过深入理解Bitmap的工作机制,开发者和系统管理员能够更好地管理和维护Linux环境下的RAID...

    Android下利用Bitmap切割图片

    切割图片通常指的是从原始图片中提取出一个矩形区域,这个操作在Android中可以通过Bitmap.createBitmap方法实现。以下是一个简单的示例,展示如何从Bitmap中裁剪出指定大小和位置的子Bitmap: ```java // 原始...

    Android 实现把bitmap图片的某一部分的颜色改成其他颜色

    Android 实现把bitmap图片的某一部分的颜色改成其他颜色 在 Android 开发中,bitmap 图片处理是一个非常重要的方面,特别是在图片颜色修改方面,今天我们将介绍如何实现把 bitmap 图片的某一部分的颜色改成其他颜色...

    bitmap上传图片demo

    为了实现圆形裁剪,我们可以创建一个圆形的BitmapShader,将其设置到Paint对象中,然后使用`drawCircle()`方法绘制圆心在Bitmap中心的圆。具体步骤如下: - 创建一个Shader,如`BitmapShader(shader, Shader....

    Bitmap类和PictureBox控件实现显示,保存

    使用`Bitmap`类和`PictureBox`控件实现图像的显示和保存通常涉及以下步骤: - 加载图像:首先,通过`Bitmap`类的`Load`方法从文件加载图像,然后将其赋值给`PictureBox`的`Image`属性。 ```csharp Bitmap bitmap = ...

    Activity跳转时传递Bitmap对象

    在Activity间传递Bitmap,有两种主要方式:Intent extras和使用Parcelable接口。由于Bitmap对象较大,直接通过Intent的extras传递可能会导致内存溢出,因为Intent的大小有限制。因此,更推荐使用Parcelable接口。 1...

    图形图像bitmap.rar

    创建Bitmap有多种方式,比如从资源id、文件路径或流中加载。一旦Bitmap对象被创建,我们可以使用其提供的方法来获取像素信息、调整大小、裁剪、旋转、缩放等。例如,`createBitmap()`函数用于创建新的Bitmap,`copy...

    Android-使用Matrix对Bitmap进行处理

    Bitmap可以通过多种方式加载,例如从资源文件、内存或文件系统中获取。加载后,我们可以获取其宽度、高度和配置信息,以及进行颜色空间转换、像素访问和修改等操作。 Matrix类则提供了对2D矩阵运算的支持,这些运算...

    Android canvas drawBitmap方法详解及实例

    总结来说,`drawBitmap()`方法提供了灵活的方式来控制Bitmap在Canvas上的显示,包括位置、大小以及是否只绘制Bitmap的部分区域。通过结合`src`和`dst`矩形的设置,开发者可以实现各种复杂的图像绘制效果,如动画、...

    ChristmasGuestBook.rar_C# Bitmap_js 实现bitmap

    这个名为"ChristmasGuestBook.rar"的压缩包文件,似乎包含了使用C#和JavaScript实现Bitmap对象的示例或教程。 Bitmap类在C#中的使用是.NET框架中GDI+(图形设备接口)的一部分,它允许开发者创建、加载和操作位图...

    处理bitmap内存溢出问题

    这可以通过设置`inJustDecodeBounds`属性为`true`并调用`BitmapFactory.decodeFile()`来实现,此时不会创建实际的`Bitmap`对象,但会填充`Options`对象中的`outWidth`和`outHeight`属性,用于计算合适的`...

    canvas 转换成bitmap

    "Android 中 Canvas 转换为 Bitmap" Android 中 Canvas 转换为 Bitmap ...将 Canvas 转换为 Bitmap 是 Android 中的一种常见需求,通过使用 Canvas 和 Bitmap,我们可以将图形绘制到 ImageView 中,并实现图形的显示。

    Bitmap位图旋转范例

    这个“Bitmap位图旋转范例”是一个完整的工程,它提供了Bitmap旋转的实现方法,对于学习和理解Bitmap旋转的原理非常有帮助。 首先,我们需要理解Bitmap旋转的基本原理。Bitmap的旋转通常是基于其像素数据的重新排列...

    Android中Glide获取图片Path、Bitmap用法详解

    软件开发网在此之前给大家介绍过图片加载框架Glide的基本用法介绍,大家可以先参考一下,本篇内容更加深入的分析了Glide获取图片Path、Bitmap用法,以及实现的代码分析。 1. 获取Bitmap: 1)在图片下载缓存好之后...

    c#.net Bitmap类的基本使用方法

    在C#.NET编程环境中,`Bitmap`类是用于处理图像的核心类,它允许开发者创建、加载、修改和显示位图图像。本篇文章将详细介绍`Bitmap`类的...这为开发者提供了一种灵活的方式,以便在应用程序中实现丰富的图像处理功能。

Global site tag (gtag.js) - Google Analytics