⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bitmapeffectlayer.as.svn-base

📁 一个2D基于verlet的Flash物理引擎。它用AS3编写而成。Fisix的目标是应用到游戏等计算量很大的实时应用中。尽管flash比c/c++要慢,很棒的物理引擎
💻 SVN-BASE
字号:
/**
* ...
* @author Default
* @version 0.1
*/

package org.papervision3d.core.layers {
	
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	import flash.geom.Matrix;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	
	import org.papervision3d.core.effects.*;
	import org.papervision3d.core.effects.utils.BitmapClearMode;
	import org.papervision3d.core.effects.utils.BitmapDrawCommand;
	

	public class BitmapEffectLayer extends EffectLayer{
		
		public var canvas:BitmapData;
		private var transMat:Matrix;
		public var clearMode:String = BitmapClearMode.CLEAR_PRE;
		public var clippingRect:Rectangle;
		public var clippingPoint:Point;
		public var drawCommand:BitmapDrawCommand;
		public var clearBeforeRender:Boolean;
		public var bitmapContainer:Bitmap;
		
		public function BitmapEffectLayer(w:int, h:int, transparent:Boolean = true, fillColor:uint = 0, clearMode:String = "clear_pre", renderAbove:Boolean =  true, clearBeforeRender:Boolean = false){
			
			effects = new Array();
			canvas = new BitmapData(w, h, transparent, fillColor);
			
			transMat = new Matrix();
			transMat.translate(w>>1, h>>1);
			
			bitmapContainer = new Bitmap(canvas);
			addChild(bitmapContainer);
			
			bitmapContainer.x = -(w*0.5);
			bitmapContainer.y = -(h*0.5);
			
			drawLayer = new Sprite();
			addChild(drawLayer);
			
			this.clearMode = clearMode;
			
			clippingPoint = new Point();
			clippingRect = canvas.rect;
			
			drawCommand = new BitmapDrawCommand();
			
			this.clearBeforeRender = clearBeforeRender;
			if(!renderAbove)
				setChildIndex(drawLayer, 0);
			
		}
		
		public function fillCanvas(color:uint):void{
			canvas.fillRect(canvas.rect, color);
		}
		
		public override function renderEffects():void{

			var drawTarget:DisplayObject = drawLayer;
			if(drawCommand.drawContainer){
			
				drawTarget = this;
			}
			
			drawCommand.draw(canvas, drawTarget, transMat, clippingRect);

			for each(var e:AbstractEffect in effects){
				e.postRender();
			}
			if(clearMode == BitmapClearMode.CLEAR_POST)
				drawLayer.graphics.clear();
			
		}
		public override function removeEffect(fx:AbstractEffect):void{
			

		}
		
		public function setClipping(rect:Rectangle, point:Point):void{
			this.clippingRect = rect;
			this.clippingPoint = point;
		}
		
		public override function addEffect(fx:AbstractEffect):void{
			
			fx.attachEffect(this);
			effects.push(fx);
			
		}
		
		public override function updateBeforeRender():void
		{
			
			if(clearBeforeRender)
				canvas.fillRect(canvas.rect, 0);
			
			faceCount = 0;
			screenDepth = 0;
			for each(var e:AbstractEffect in effects){
				e.preRender();
			}
			
			if(clearMode == BitmapClearMode.CLEAR_PRE)
				drawLayer.graphics.clear();
		}
		
		public function getTranslationMatrix():Matrix{
			return transMat;
		}
		
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -