ActionScript Learning 101120-2

11.20.2010

ベジェ曲線の均等分割を調整する。

前に制作したNM_Irregularcircleのベジェ曲線の均等分割が精度がいまひとつのため、値によっては誤差が目立つので調整した。

やっていることはwhileを使って誤差が許容範囲になるまで分割する長さを調整して均等分割を繰り返しているだけ。 前後のポイントから三角関数を使用して、MovieClipの向きを調整している。

SAMPLE VIEW CODE

package {
	
	import flash.events.*;
	import flash.display.*;
	
	import caurina.transitions.Tweener;
	import caurina.transitions.properties.ColorShortcuts;
	

	public class NMain extends MovieClip {
		
		//-------------------------------------------------------------------------------- Properties
		
		private var _this:*;
		private var _stage:Stage;
		
		private var _main:MovieClip;
		
		
		
		//-------------------------------------------------------------------------------- Constractor
		
		public function NMain() {
			
			ColorShortcuts.init();
			
			_this = this;
			
			_this.addEventListener(Event.ADDED_TO_STAGE, Init);
		}
		
		
		//-------------------------------------------------------------------------------- Function
		 
		/**
		 * Init
		 */
		public function Init(eo:* = null):void {
			
			_this.removeEventListener(Event.ADDED_TO_STAGE, Init);
			
			_stage = stage;			
			_stage.scaleMode = StageScaleMode.NO_SCALE;
			_stage.align = StageAlign.TOP_LEFT;		
			
			_main = new MovieClip();
			_this.addChild(_main);
			
			_stage.addEventListener(Event.RESIZE, stageresizeaction);
			stageresizeaction();

			initirregularcircle();
		}
		/**
		 * initialize irregularcircle
		 */
		private var points:Array;
		
		private function initirregularcircle():void {
			
			var args = {};
			
			args.anchorlength = 6;
			args.radius = 200;
			args.roundval = 50;
			args.irregular_ap = -100;
			args.irregular_cp = 100;
			args.linesize = 1;
			args.linealpha = .5;
			args.fillalpha = 0;
			args.linecolor = 0xFFFFFF;
			args.fillcolor = args.linecolor;
			
			var irrcircle = new NM_Irregularcircle();

			irrcircle.Init(args);
			
			points = irrcircle.getSplitPoints(10, 5000, 1);
			trace(points.length);
			
			var nmg = new NM_Gradation();
			var cols = nmg.Colors(0x00A0E9, 0xE4007F, points.length);
			
			var _triangle:MovieClip;
			
			for(var i:uint = 0; i < points.length; i ++) {
				
				_triangle = new triangle();
				
				var now_cnt = i;
				var next_cnt = now_cnt + 1;
				if(next_cnt ==  points.length) next_cnt = 0;
				
				var now_p = points[now_cnt];
				var next_p = points[next_cnt];				
	
				_triangle.rotation = Math.atan2(now_p.y - next_p.y, now_p.x - next_p.x) * 180 / Math.PI - 90;
				
				//trace(_triangle.rotation);
				
				Tweener.addTween(_triangle, {_color:cols[i]});	

				_triangle.x = now_p.x;
				_triangle.y = now_p.y;
				_triangle.alpha = .6;

				_main.addChild(_triangle);
			}
			
			_main.addChild(irrcircle);
		}

		
		/**
		 * stage resize
		 */
		private function stageresizeaction(eo:* = null):void {
			
			_main.x = Math.round(_stage.stageWidth / 2);
			_main.y = Math.round(_stage.stageHeight / 2);
		}
	}
}




category : ActionScript / Flash

Demonstrations

Feature Samples

Author

虹村 マキオウ (nizimura makiou)

猫と太極拳を愛する横浜在住のフリーランスクリエイターです。

logo

Demo and Sample

Category