Tag Archives: グラデーション

グラデーション

マウスドラッグすると、指定した色でグラデーション描画

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package
{
	import flash.display.*;
	import flash.events.*;
	import flash.events.MouseEvent;
	import flash.geom.Matrix;
	import flash.geom.Point;
	import fl.controls.*;
 
	[SWF(width="500", height="400")]
	public class Main extends Sprite
	{
		private var color:Array = [0xFEBF05, 0xFFD65D];
		private var start:Point = new Point();
		private var canvas:Sprite = new Sprite();
		private var drag:Sprite = new Sprite();
 
		private var parentWidth:Number;
		private var parentHeight:Number;
 
		public function Main(){	
			init();
		}
 
		public function init():void
		{
			//Wonderfl.capture_delay(15);
			//親MCの大きさを定義
			parentWidth = stage.stageWidth;
			parentHeight = stage.stageHeight;
 
			//グラデーションの描画対象を定義
			canvas.graphics.beginFill(0xFFFFFF);
			canvas.graphics.drawRect(0, 0, parentWidth, parentHeight);
			canvas.graphics.endFill();
			addChild(canvas);
 
			//グラデーションを描画する際に使用する位置、角度情報を取得するドラッグオブジェクトの定義
			drag = new Sprite();
			addChild(drag);
 
			//色を決定するカラーパネル(ラジオボタン)
			var ColorPanel:MovieClip = new MovieClip();
			var shape:Shape = new Shape();
			shape.graphics.lineStyle(1, 0xCCCCCC);
			shape.graphics.beginFill(0xE1E1E1);
			shape.graphics.drawRect(0,0,150,200);
			shape.alpha = 0.5;
			ColorPanel.addChild(shape);
 
 
			//カラーパネルの描画位置
			ColorPanel.x = parentWidth - ColorPanel.width;
			ColorPanel.y = parentHeight - ColorPanel.height;
			addChild(ColorPanel);
 
 
			//選択色 配列
			var colorNames:Array = new Array("Yellow", "Blue", "Red", "Green", "Pear");
			var colorArr:Array = new Array([0xFEBF05, 0xFFD65D], [0x80E0F8, 0xCDF8FF], [0x6D0019, 0xA80329], [0x7DE31F, 0xC7FE30], [0xD1D360, 0xE5E695]);
			var radioButton:RadioButton;
			var radioGroup:RadioButtonGroup = new RadioButtonGroup("Colors");
 
			for(var i:int=0; i<colorArr.length; i++){
				radioButton = new RadioButton();
				radioButton.group = radioGroup;
				radioButton.label = colorNames[i];
				radioButton.value = colorArr[i];
				ColorPanel.addChild(radioButton);
				radioButton.x = 5;
				radioButton.y = i * radioButton.height + 70;
				radioButton.addEventListener(MouseEvent.CLICK, _SelectEvent);
				if(i==0) radioButton.selected = true;
			}
 
			stage.addEventListener(MouseEvent.MOUSE_DOWN, _onMouseDown);
			stage.addEventListener(MouseEvent.MOUSE_UP, _onMouseUp);
		}
 
		//選択されたラジオボタン
		private function _SelectEvent(event:Event):void
		{
			color = event.currentTarget.value;
		}
 
		//グラデーションの幅と角度の確定 ----------------------------------------------------
		private function _onMouseDown(event:MouseEvent):void
		{
			start.x = mouseX;
			start.y = mouseY;
 
			drag.graphics.clear();
			drag.graphics.lineStyle(1.0, 0x7F7F7F);
			drag.graphics.beginFill(0xFFFFFF);
			drag.graphics.drawCircle(start.x, start.y, 3);
			drag.graphics.endFill();
 
			stage.addEventListener(MouseEvent.MOUSE_MOVE, _onMouseMove);
		}
 
		//---------------------------------------------------------------------------------
		private function _onMouseMove(event:MouseEvent):void
		{
			drag.graphics.clear();
 
			drag.graphics.lineStyle(1.0, 0x9F9F9F);
			drag.graphics.moveTo(start.x, start.y);
			drag.graphics.lineTo(mouseX, mouseY);
 
			drag.graphics.lineStyle(1.0, 0x7F7F7F);
			drag.graphics.beginFill(0x333333);
			drag.graphics.drawCircle(start.x, start.y, 3);
			drag.graphics.drawCircle(mouseX, mouseY, 3);
			drag.graphics.endFill();
		}
 
		//---------------------------------------------------------------------------------
		private function _onMouseUp(event:MouseEvent):void
		{
				drag.graphics.clear();
				stage.removeEventListener(MouseEvent.MOUSE_MOVE, _onMouseMove);
 
				var dist:Number = Math.sqrt(Math.pow(mouseX - start.x, 2) + Math.pow(mouseY - start.y, 2));
				var radian:Number = Math.atan2(mouseY - start.y, mouseX - start.x);
 
				var matrix:Matrix = new Matrix();
				matrix.createGradientBox(parentWidth, parentHeight, 0, -parentWidth/2, -parentHeight/2);
 
				canvas.graphics.clear();
				canvas.graphics.beginGradientFill("linear", color, [1.0, 1.0], [127, 128 + dist / 1400 * 255], matrix);
				canvas.graphics.drawRect(-700, -700, parentWidth * 3, parentHeight * 3);
				canvas.graphics.endFill();
				canvas.x = start.x;
				canvas.y = start.y;
				canvas.rotation = radian / (Math.PI / 180);				
				//trace(color + "\n" + 128 + dist/parentWidth * 255 + "\n" + matrix + "\n" );
		}
	}
}