道っぽい表現のつもり

by sakusan393
...
@author 393
道っぽい表現をつくりたかったけど
なんだかいまいちな感じ。。。
♥0 | Line 157 | Modified 2009-09-04 14:45:08 | MIT License
play

ActionScript3 source code

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

package  {
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.BlendMode;
	import flash.display.GradientType;
	import flash.display.Graphics;
	import flash.display.InterpolationMethod;
	import flash.display.SpreadMethod;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.geom.ColorTransform;
	import flash.geom.Matrix;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	
	/**
	 * ...
	 * @author 393
	 * 道っぽい表現をつくりたかったけど
	 * なんだかいまいちな感じ。。。

	 */
	public class Main extends Sprite {
		private var stage_center_x:Number;
		private var stage_center_y:Number;
		private var stage_right_x:Number;
		private var stage_bottom_y:Number;
		//ポイント座標格納用
		private var pointArray:Array;
		private var top:Point;
		private var left:Point;
		private var right:Point;
		private var bottom:Point;
		private var bmd:BitmapData;
		private var cTra:ColorTransform;
		private var rect:Rectangle;
		private var matrix:Matrix;
		private var speed:Number = 0;
		private var prevX:Number;
		private var prevY:Number;
		
		public function Main() {
			
			//ポイント座標の設定
			var ratio:Number = 1.6;
			var sideRatio:Number = 10;
			rect = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);
			matrix = new Matrix();
			
			//基本三角形の座標
			top = new Point(0,stage.stageHeight/2);
			left = new Point(0+stage.stageWidth/sideRatio,stage.stageHeight*ratio);
			right = new Point(stage.stageWidth-stage.stageWidth/sideRatio,stage.stageHeight*ratio);
			
			
			stage_center_x = stage.stageWidth/2;
			stage_center_y = stage.stageHeight/2;
			stage_right_x = stage.stageWidth;
			
			setPoint();
			var sp:Sprite  = new Sprite();
			sp.blendMode = BlendMode.SCREEN;
			sp.x = stage.stageWidth;
			sp.y = stage.stageHeight;
			prevX = sp.x;
			prevY = sp.y;
			bmd = new BitmapData(stage.stageWidth,stage.stageHeight,false, 0x00000000);
			var bm:Bitmap = new Bitmap(bmd);
			addChild(bm);
			addChild(sp);
			cTra= new ColorTransform( 0.8, 0.7, 0.7, 1);
			
			sp.addEventListener(Event.ENTER_FRAME , enterFrameHandler);
		}
		
		private function enterFrameHandler(e:Event = null ):void {
			
			var sp:Sprite = e.target as Sprite;
			var spg:Graphics = sp.graphics;
			spg.clear();
			//spg.beginFill(Math.random()*0xFFFFFF);
			//spg.beginFill(0xFFCCFF);
			spg.beginGradientFill(GradientType.RADIAL,
				[0xFFFFcc , 0xFFFFcc , 0xFFFF33 , 0xFFFF00 , 0xCCCC00],
				[ 1 , 1 ,  1 ,  1 , 1],
				[ 0 , 64, 127 , 192 , 255],
				new Matrix(
					1 , 0 ,
					0 , 1 ,
					top.x , top.y
				),
				SpreadMethod.PAD,
				InterpolationMethod.LINEAR_RGB,
				0.0
			);

			spg.moveTo(pointArray[0].posX, pointArray[0].posY);
			for (var i:uint = 1; i < pointArray.length-1; i++){
				spg.curveTo(pointArray[i].posX, pointArray[i].posY,(pointArray[i].posX + pointArray[i+1].posX)/2, (pointArray[i].posY + pointArray[i+1].posY)/2);
			}
			spg.curveTo(pointArray[pointArray.length-1].posX, pointArray[pointArray.length-1].posY,pointArray[0].posX, pointArray[0].posY);
			spg.endFill();
			move(sp);
			
		}
		
		private function move(sp:Sprite):void{
			speed += 10;
			var radian:Number = degreeToRadian(speed);
			//固定的な動き
			sp.x = 60 * Math.sin(radian) + stage_center_x;
			sp.y = 80 * Math.cos(radian / 10);
			
			//マウスに反応
			//sp.x += ((mouseX + 100) - prevX)*0.05;
			//sp.y += ((mouseY -stage.stageHeight / 2 + 50) - prevY) * 0.05;
			//prevX = sp.x;
			//prevY = sp.y;
			
			matrix.tx = sp.x;
			matrix.ty = sp.y;
			
			bmd.draw(sp, matrix, cTra);
			bmd.colorTransform(rect, cTra);

		}
		private function degreeToRadian(degree:Number ):Number{
			var radian = degree * (Math.PI / 180);
			return radian;
		}
		private function setPoint():void{
			pointArray = new Array();
			pointArray.push(new CustomPoint(top.x, top.y, 100, 20, 5,2,0))
			pointArray.push(new CustomPoint(top.x -(top.x-left.x)*1/4,top.y-(top.y-left.y)*1/4,200,30,5,4,-30))
			pointArray.push(new CustomPoint(top.x -(top.x-left.x)*2/4,top.y-(top.y-left.y)*2/4,250,60,5,3,-60))
			pointArray.push(new CustomPoint(top.x -(top.x-left.x)*3/4,top.y-(top.y-left.y)*3/4,300,90,5,2,-90))
			pointArray.push(new CustomPoint(left.x,left.y,300,10,5,5, -120))
			pointArray.push(new CustomPoint(right.x,right.y,300,10,5,5,-120))
			pointArray.push(new CustomPoint(top.x -(top.x-right.x)*3/4,top.y-(top.y-right.y)*3/4,300,90,5,2,-90))
			pointArray.push(new CustomPoint(top.x -(top.x-right.x)*2/4,top.y-(top.y-right.y)*2/4,250,60,5,3,-60))
			pointArray.push(new CustomPoint(top.x -(top.x-right.x)*1/4,top.y-(top.y-right.y)*1/4,200,30,5,4,-30))
		}
	}
}
import flash.events.Event;
import flash.geom.Point;
import flash.display.Sprite;

class CustomPoint extends Sprite {
	private var _posX:Number;
	private var _posY:Number;
	private var _radiusX:Number;
	private var _radiusY:Number;
	private var degreeSpeedX:Number = 0;
	private var degreeSpeedY:Number = 0;
	private var defoPosX:Number;
	private var defoPosY:Number;
	private var speed:Number;
	private var _speedX:Number;
	private var _speedY:Number;
	
	public function CustomPoint(posX:Number,posY:Number,radiusX:Number = 100,radiusY:Number = 100,speedX:Number = 15, speedY:Number = 15, delay:Number = 0):void {
		_posX = defoPosX = posX;
		_posY = defoPosY = posY;
		_speedX = speedX;
		_speedY = speedY;
		degreeSpeedX += delay;
		degreeSpeedY += delay;
		
		_radiusX = radiusX;
		_radiusY = radiusY;
		speed = 5;
		addEventListener(Event.ENTER_FRAME, enterFrameHandler);
	}
	
	private function enterFrameHandler(e:Event):void {
		degreeSpeedX += _speedX;
		degreeSpeedY += _speedY;
		var radianX = degreeToRadian(degreeSpeedX);
		var radianY = degreeToRadian(degreeSpeedY);
		_posX = _radiusX * Math.sin(radianX/.8) + defoPosX;
		_posY = _radiusY * Math.cos(radianY/.8) + defoPosY;
	}
	
	private function degreeToRadian(degree:Number ):Number{
		var radian = degree * (Math.PI / 180);
		return radian;
	}
	
	public function get posX():Number { return _posX; }
	
	public function set posX(value:Number):void{
		_posX = value;
	}
	
	public function get posY():Number { return _posY; }
	
	public function set posY(value:Number):void{
		_posY = value;
	}
	
}

Forked