うねうねDisplacementMapFilterテスト

by nemu90kWw
♥29 | Line 90 | Modified 2009-03-24 11:41:44 | MIT License
play

ActionScript3 source code

/**
 * Copyright nemu90kWw ( http://wonderfl.net/user/nemu90kWw )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/pY8M
 */

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns="*"
	width="465" height="465">
	
	<mx:VBox width="100%" height="100%">
		<mx:Panel title="DisplacementMapFilter TEST" width="100%" height="165" paddingLeft="4" paddingRight="4">
			<mx:HBox width="100%" height="100%">
				<mx:VBox height="100%" paddingTop="16" verticalGap="4">
					<mx:Label text="type"/>
					<mx:Spacer height="4"/>
					<mx:Label text="speed"/>
					<mx:Label text="rate"/>
					<mx:Label text="depth"/>
				</mx:VBox>
				<mx:VBox width="100%" height="100%" paddingTop="10" verticalGap="4">
					<mx:ComboBox id="list_type" width="80" change="dmf.type=list_type.selectedItem.data;">
						<mx:dataProvider>
							<mx:Array>
								<mx:Object label="横" data="h"/>
								<mx:Object label="縦" data="v"/>
							</mx:Array>
						</mx:dataProvider>
					</mx:ComboBox>
					<mx:Spacer height="4"/>
					<mx:HSlider id="hs_speed" value="2" minimum="0" maximum="20"
						width="100%" change="dmf.speed=hs_speed.value;"/>
					<mx:HSlider id="hs_rate" value="0.1" minimum="0" maximum="1"
						width="100%" change="dmf.rate=hs_rate.value;"/>
					<mx:HSlider id="hs_depth" value="50" minimum="0" maximum="500"
						width="100%" change="dmf.depth=hs_depth.value;"/>
				</mx:VBox>
			</mx:HBox>
		</mx:Panel>
		<mx:Canvas width="100%" height="100%">
			<DMFTest id="dmf" width="100%" height="100%" />
		</mx:Canvas>
	</mx:VBox>
	
	<mx:Component className="DMFTest">
		<mx:UIComponent creationComplete="init();">
			<mx:Script>
				<![CDATA[
		private var filter:DisplacementMapFilter = new DisplacementMapFilter();
		private var map:BitmapData;
		
		public var type:String = "h";
		public var offset:Number = 0;
		public var speed:Number = 2;
		public var rate:Number = 0.1;
		public var depth:Number = 50;
		
		private var source:BitmapData;
		private var buffer:BitmapData;
		
		public function init():void
		{
			map = new BitmapData(465, 300, false);
			filter.mapBitmap = map;
			filter.componentX = BitmapDataChannel.BLUE;
			filter.componentY = BitmapDataChannel.BLUE;
			
			var shape:Shape = new Shape();
			shape.graphics.lineStyle(8, 0x000000);
			shape.graphics.beginFill(0xE06000);
			shape.graphics.drawCircle(465/2, 150, 100);
			shape.graphics.endFill();
			
			source = new BitmapData(465, 300, false, 0xF0FFC0);
			source.draw(shape);
			
			buffer = new BitmapData(465, 300, false);
			addChild(new Bitmap(buffer));
			
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
		
		private function onEnterFrame(e:Event):void
		{
			for(var i:int = 0; i < map.height; i++) {
				map.fillRect(new Rectangle(0, i, map.width, 1), Math.round(Math.sin((i+offset)*rate)*0x7F+0x80));
			}
			
			switch(type)
			{
			case "h":
				filter.scaleX = depth;
				filter.scaleY = 0;
				break;
			case "v":
				filter.scaleX = 0;
				filter.scaleY = depth;
				break;
			}
			
			offset += speed;
			
			buffer.applyFilter(source, source.rect, new Point(0, 0), filter);
		}
				]]>
			</mx:Script>
		</mx:UIComponent>
	</mx:Component>
</mx:Application>