<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>tokyo3.0</title>
	<atom:link href="http://andante.in/a/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://andante.in/a</link>
	<description>actionscript3.0 develop log　written by s26</description>
	<lastBuildDate>Tue, 07 Dec 2010 03:28:36 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>bound</title>
		<link>http://andante.in/a/?p=82</link>
		<comments>http://andante.in/a/?p=82#comments</comments>
		<pubDate>Sat, 22 May 2010 06:53:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[基礎]]></category>

		<guid isPermaLink="false">http://andante.in/a/?p=82</guid>
		<description><![CDATA[ボールを跳ね返らせたい。って時の 物理的な考察をしていきます。 ActionSCript3.0です。 ※下記のサンプルはball,btnという２つのクラスに関しては省略して記載してあります。 （ライブラリに用意しているだけ。） 　 01.ボールを落とす。 物理運動に習ったものなので、とりあえず、ボールを落とす運動を書いてみます。 　 &#8211; script &#8211; package { import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; public class bound1 extends Sprite { var _ball:MovieClip var _ballVelocityY:Number; public function bound1() { init(); } private function init():void { makeball(); } private function makeball():void { var _btn:MovieClip = new btn(); addChild(_btn) _btn.x [...]]]></description>
			<content:encoded><![CDATA[<p>ボールを跳ね返らせたい。って時の<br />
物理的な考察をしていきます。<br />
ActionSCript3.0です。<br />
※下記のサンプルはball,btnという２つのクラスに関しては省略して記載してあります。<br />
（ライブラリに用意しているだけ。）</p>
<p>　</p>
<p>01.ボールを落とす。<br />
物理運動に習ったものなので、とりあえず、ボールを落とす運動を書いてみます。</p>
<p>　</p>
<div style="border:1px solid white;">
<div id="bound1"></div>
</div>
<p>&#8211; script &#8211;</p>
<pre>
package  {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;

	public class bound1 extends Sprite {
		var _ball:MovieClip
		var _ballVelocityY:Number;
		public function bound1() {
			init();
		}
		private function init():void {
			makeball();
		}
		private function makeball():void {
			var _btn:MovieClip = new btn();
			addChild(_btn)
			_btn.x = 10; _btn.y = 10;
			_btn.addEventListener(MouseEvent.CLICK,function(){
				_ball= new ball();
				addChild(_ball);
				_ball.x = stage.stageWidth / 2;
				_ball.y = stage.stageHeight / 4;
				_ballVelocityY = 0;
				putVelocity();
			});
		}
		private function putVelocity():void {
			_ballVelocityY = 0;
			addEventListener(Event.ENTER_FRAME,moving);
		}
		private function moving(e:Event):void {
			_ballVelocityY += 9.8 / 60;
			_ball.y += _ballVelocityY;
		}
	}
}
</pre>
<p>　</p>
<p>では、落ちた時に、<br />
つまり、ボールがステージの外に出た瞬間に、<br />
ボールの速度を反対方向にしてあげれば<br />
ボールがぶつかった速度で跳ね返ります。<br />
02.ボールを跳ね返す。</p>
<p>　</p>
<div style="border:1px solid white;">
<div id="bound2"></div>
</div>
<p>&#8211; script &#8211;</p>
<pre>
package  {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;

	public class bound2 extends Sprite {
		var _ball:MovieClip
		var _ballVelocityY:Number;
		public function bound2() {
			init();
		}
		private function init():void {
			makeball();
		}
		private function makeball():void {
			var _btn:MovieClip = new btn();
			addChild(_btn)
			_btn.x = 10;
			_btn.y = 10;
			_btn.addEventListener(MouseEvent.CLICK,function(){
				_ballVelocityY = 0;
				_ball= new ball();
				addChild(_ball);
				_ball.x = stage.stageWidth / 2;
				_ball.y = stage.stageHeight / 4;
				putVelocity()
			});
		}
		private function putVelocity():void {
			_ballVelocityY = 0;
			addEventListener(Event.ENTER_FRAME,moving);
		}
		private function moving(e:Event):void {
			_ballVelocityY += 9.8 / 60;
			_ball.y += _ballVelocityY;
			if (_ball.y+_ball.height/2 > stage.stageHeight) {
				_ballVelocityY = -_ballVelocityY;
			}
		}
	}
}
</pre>
<p>　</p>
<p>上の記述は一見ただしそうですが、<br />
ぶつかった瞬間にボールが壁に埋もれている。<br />
_ball.y+_ball.height/2 > stage.stageHeight<br />
埋まってた分だけこの瞬間に跳ね返してしまいます。</p>
<p>　</p>
<div style="border:1px solid white;">
<div id="bound3"></div>
</div>
<p>&#8211; script &#8211;</p>
<pre>
package  {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;

	public class bound3 extends Sprite {
		var _ball:MovieClip
		var _ballVelocityY:Number = 0;
		public function bound3() {
			init();
		}
		private function init():void {
			makeball();
		}
		private function makeball():void {
			var _btn:MovieClip = new btn();
			addChild(_btn)
			_btn.x = 10;_btn.y = 10;
			_btn.addEventListener(MouseEvent.CLICK,function(){
				_ballVelocityY = 0;
				_ball= new ball();
				addChild(_ball);
				_ball.x = stage.stageWidth / 2;
				_ball.y = stage.stageHeight / 4;
				putVelocity()
			});
		}
		private function putVelocity():void {
			_ballVelocityY = 0;
			addEventListener(Event.ENTER_FRAME,moving);
		}
		private function moving(e:Event):void {
			_ballVelocityY += 9.8 / 60;
			_ball.y += _ballVelocityY;
			if (_ball.y + _ball.height / 2 > stage.stageHeight) {
				//めりこまない
				_ball.y -= (_ball.y + _ball.height / 2 - stage.stageHeight);
				_ballVelocityY = -_ballVelocityY;
			}
		}
	}
}
</pre>
<p>　</p>
<p>上のだとずっと同じ繰り返しです。<br />
frictionっていう名前で<br />
跳ね返りの瞬間に速度を削ってあげると以下になります。</p>
<p>　</p>
<div style="border:1px solid white;">
<div id="bound4"></div>
</div>
<p>&#8211; script &#8211;</p>
<pre>
package  {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;

	public class bound4 extends Sprite {
		var _ball:MovieClip
		var _ballVelocityY:Number = 0;
		static var _friction:Number = 0.9
		public function bound4() {
			init();
		}
		private function init():void {
			makeball();
		}
		private function makeball():void {
			var _btn:MovieClip = new btn();
			addChild(_btn)
			_btn.x = 10;_btn.y = 10;
			_btn.addEventListener(MouseEvent.CLICK,function(){
				_ball= new ball();
				_ballVelocityY = 0
				addChild(_ball);
				_ball.x = stage.stageWidth / 2;
				_ball.y = stage.stageHeight / 4;
				putVelocity()
			});
		}
		private function putVelocity():void {
			_ballVelocityY = 0;
			addEventListener(Event.ENTER_FRAME,moving);
		}
		private function moving(e:Event):void {
			_ballVelocityY += 9.8 / 60;
			_ball.y += _ballVelocityY;
			if (_ball.y + _ball.height / 2 > stage.stageHeight) {
				_ball.y -= (_ball.y + _ball.height / 2 - stage.stageHeight) * _friction;
				_ballVelocityY = -_ballVelocityY*_friction;
			}
		}
	}
}
</pre>
<p>　</p>
<p>固い感じがします。<br />
あたった瞬間に「ぐにゅ」って縮めてあげればいいのではないかな。<br />
しかも速度に応じての必要があるよね。<br />
下記の式は<br />
_ball.scaleX = 1/_ball.scaleY<br />
常に玉の面積（２次なので）が一定になるようにする事で、<br />
縦に短くすると同時に横も伸びるようにしています。</p>
<p>　</p>
<div style="border:1px solid white;">
<div id="bound5"></div>
</div>
<p>&#8211; script &#8211;</p>
<pre>
package  {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;

	public class bound5 extends Sprite {
		var _ball:MovieClip
		var _ballVelocityY:Number = 0;
		static var _friction:Number = 0.6
		public function bound5() {
			init();
		}
		private function init():void {
			makeball();
		}
		private function makeball():void {
			var _btn:MovieClip = new btn();
			addChild(_btn)
			_btn.x = 10; _btn.y = 10;
			_btn.addEventListener(MouseEvent.CLICK,function(){
				_ball= new ball();
				addChild(_ball);
				_ball.x = stage.stageWidth / 2;
				_ball.y = stage.stageHeight / 4;
				putVelocity()
				_ballVelocityY = 0;
			});
		}

		private function putVelocity():void {
			_ballVelocityY = 0;
			addEventListener(Event.ENTER_FRAME,moving);
		}

		private function moving(e:Event):void {
			_ballVelocityY += 9.8 / 60;
			_ball.y += _ballVelocityY;
			_ball.scaleY += (1 - _ball.scaleY)/5
			if (_ball.y + _ball.height / 2 > stage.stageHeight) {
				_ball.scaleY = 1/(_ballVelocityY/30+1);
				_ball.y -= (_ball.y + _ball.height / 2 - stage.stageHeight) * _friction;
				_ballVelocityY = -_ballVelocityY*_friction;
			}
			_ball.scaleX = 1/_ball.scaleY
		}
	}
}
</pre>
<p>　</p>
<p>大きさが戻る時に妙な違和感がありますよね。<br />
大きさが元に戻るんだけど、<br />
ぽにょぽにょするものって、<br />
横長のものが丸に戻った後に縦長になって。<br />
っていうみたいな動きが必要なので。<br />
伸縮にバネの公式を当てはめてあげます。</p>
<p>　</p>
<div style="border:1px solid white;">
<div id="bound6"></div>
</div>
<p>&#8211; script &#8211;</p>
<pre>
package  {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;

	public class bound6 extends Sprite {
		var _ball:MovieClip
		var _ballVelocityY:Number = 0;
		var _ballVelocityIN:Number = 0
		static var _friction:Number = 0.6;

		public function bound6() {
			init();
		}
		private function init():void {
			makeball();
		}
		private function makeball():void {
			var _btn:MovieClip = new btn();
			addChild(_btn)
			_btn.x = 10;_btn.y = 10;
			_btn.addEventListener(MouseEvent.CLICK,function(){
				_ball= new ball();
				addChild(_ball);
				_ball.x = stage.stageWidth / 2;
				_ball.y = stage.stageHeight / 4;
				putVelocity()
				_ballVelocityY = 0;
				_ballVelocityIN = 0;
			});
		}

		private function putVelocity():void {
			_ballVelocityY = 0;
			addEventListener(Event.ENTER_FRAME,moving);
		}

		private function moving(e:Event):void {
			_ballVelocityY += 9.8 / 60;
			_ball.y += _ballVelocityY;
			_ballVelocityIN += (1 - _ball.scaleY) * Math.abs(1 - _ball.scaleY) * 0.9
			_ballVelocityIN *= 0.90
			_ball.scaleY += _ballVelocityIN
			if (_ball.y + _ball.height / 2 > stage.stageHeight) {
				_ball.y -= (_ball.y + _ball.height / 2 - stage.stageHeight) * _friction;

				_ball.scaleY = 1/(_ballVelocityY/30+1);
				_ballVelocityY = -_ballVelocityY*_friction;
			}
			_ball.scaleX = 1/_ball.scaleY
		}
	}
}
</pre>
<p>　</p>
<p>既に気持ちは完成ですが、縦だけじゃつまらないので、<br />
横にも移動する形にします。<br />
大きさに関しては若干見苦しいかと思いますが、<br />
体積が変わらず、ってとこを中心に<br />
調整をしてみました。</p>
<p>　</p>
<div style="border:1px solid white;">
<div id="bound7"></div>
</div>
<p>&#8211; script &#8211;</p>
<pre>
package  {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;

	public class bound7 extends Sprite {
		var _ball:MovieClip
		var _ballVelocityY:Number = 0;
		var _ballVelocityX:Number = 0;
		var _ballweight:Number = 1;
		var _ballVelocityINX:Number = 0;
		var _ballVelocityINY:Number = 0;
		var _friction:Number = 0.9;

		var _ballScaleY:Number = 1;
		var _ballScaleX:Number = 1

		public function bound7() {
			init();
		}
		private function init():void {
			makeball();
		}
		private function makeball():void {
			var _btn:MovieClip = new btn();
			addChild(_btn)
			_btn.x = 10;_btn.y = 10;
			_btn.addEventListener(MouseEvent.CLICK,function(){
				_ball= new ball();
				addChild(_ball);
				_ball.x = stage.stageWidth / 2;
				_ball.y = stage.stageHeight / 4;
				putVelocity()
			});
		}

		private function putVelocity():void {
			_ballVelocityY = 0;
			_ballVelocityX = 0;
			addEventListener(Event.ENTER_FRAME, movingY);
			addEventListener(Event.ENTER_FRAME, movingX);
			addEventListener(Event.ENTER_FRAME,movingScale);
		}

		private function movingY(e:Event):void {
			_ballVelocityY += 9.8 / 60*_ballweight;
			_ball.y += _ballVelocityY;
			_ballVelocityINY += (1 - _ballScaleY) * Math.abs(1 - _ballScaleY)
			_ballVelocityINY *= 0.9
			_ballScaleY += _ballVelocityINY
			if (_ball.y + _ball.height/2 > stage.stageHeight) {
				_ball.y -= (_ball.y + _ball.height/2 - stage.stageHeight) * _friction;
				_ballScaleY /= (_ballVelocityY/30+1);
				_ballVelocityY = -_ballVelocityY*_friction;
			}
			//_ball.scaleX = 1/_ball.scaleY
		}

		private function movingX(e:Event):void {
			_ballVelocityX += 9.8 / 60*_ballweight;
			_ball.x += _ballVelocityX;
			_ballVelocityINX += (1 - _ballScaleX) * Math.abs(1 - _ballScaleX)
			_ballVelocityINX *= 0.9
			_ballScaleX += _ballVelocityINX
			if (_ball.x + _ball.width/2 > stage.stageWidth) {
				_ball.x -= (_ball.x + _ball.width/2 - stage.stageWidth) * _friction;
				_ballScaleX /= (_ballVelocityY/30+1);
				_ballVelocityX = -_ballVelocityX*_friction;
			}
			//_ball.scaleY = 1/_ball.scaleX
		}

		private function movingScale(e:Event):void {
			var _rate:Number = _ballScaleX*_ballScaleY
			_ball.scaleX = _ballScaleX / Math.sqrt(_rate);
			_ball.scaleY = _ballScaleY / Math.sqrt(_rate);
		}
	}
}
</pre>
<p><script type="text/javascript">var vars = {};var params = { menu:'false',scale:'noScale',salign:'lt', wmode:'transparent'};var attributes = { id:'bound1', name:'bound1' };swfobject.embedSWF("/file/bound/bound1.swf", "bound1", "760", "400", "8.0.0", "", vars, params, attributes );</script></p>
<p><script type="text/javascript">var vars = {};var params = { menu:'false',scale:'noScale',salign:'lt', wmode:'transparent'};var attributes = { id:'bound2', name:'bound2' };swfobject.embedSWF("/file/bound/bound2.swf", "bound2", "760", "400", "8.0.0", "", vars, params, attributes );</script></p>
<p><script type="text/javascript">var vars = {};var params = { menu:'false',scale:'noScale',salign:'lt', wmode:'transparent'};var attributes = { id:'bound3', name:'bound3' };swfobject.embedSWF("/file/bound/bound3.swf", "bound3", "760", "400", "8.0.0", "", vars, params, attributes );</script></p>
<p><script type="text/javascript">var vars = {};var params = { menu:'false',scale:'noScale',salign:'lt', wmode:'transparent'};var attributes = { id:'bound4', name:'bound4' };swfobject.embedSWF("/file/bound/bound4.swf", "bound4", "760", "400", "8.0.0", "", vars, params, attributes );</script></p>
<p><script type="text/javascript">var vars = {};var params = { menu:'false',scale:'noScale',salign:'lt', wmode:'transparent'};var attributes = { id:'bound5', name:'bound5' };swfobject.embedSWF("/file/bound/bound5.swf", "bound5", "760", "400", "8.0.0", "", vars, params, attributes );</script></p>
<p><script type="text/javascript">var vars = {};var params = { menu:'false',scale:'noScale',salign:'lt', wmode:'transparent'};var attributes = { id:'bound6', name:'bound6' };swfobject.embedSWF("/file/bound/bound6.swf", "bound6", "760", "400", "8.0.0", "", vars, params, attributes );</script></p>
<p><script type="text/javascript">var vars = {};var params = { menu:'false',scale:'noScale',salign:'lt', wmode:'transparent'};var attributes = { id:'bound7', name:'bound7' };swfobject.embedSWF("/file/bound/bound7.swf", "bound7", "760", "400", "8.0.0", "", vars, params, attributes );</script></p>
]]></content:encoded>
			<wfw:commentRss>http://andante.in/a/?feed=rss2&#038;p=82</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>moving</title>
		<link>http://andante.in/a/?p=41</link>
		<comments>http://andante.in/a/?p=41#comments</comments>
		<pubDate>Fri, 14 May 2010 17:35:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[基礎]]></category>

		<guid isPermaLink="false">http://andante.in/a/?p=41</guid>
		<description><![CDATA[動きについての考察。 ※下記のサンプルはfish,btnという２つのクラスに関しては省略して記載してあります。 （ライブラリに用意しているだけ。） 　 01.一定の速度で移動 常に一定の数だけを足し続ける。 　 &#8211; script &#8211; package { import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; public class motion1 extends Sprite { public function motion1() { moveFish() } private function moveFish():void { var _btn:MovieClip = new btn(); addChild(_btn) _btn.x = 10;_btn.y = 10; var _fish:MovieClip = new fish(); _fish.alpha = 0; [...]]]></description>
			<content:encoded><![CDATA[<p>動きについての考察。<br />
※下記のサンプルはfish,btnという２つのクラスに関しては省略して記載してあります。<br />
（ライブラリに用意しているだけ。）</p>
<p>　</p>
<p>01.一定の速度で移動<br />
常に一定の数だけを足し続ける。</p>
<p>　</p>
<div style="border:1px solid white;">
<div id="motion1"></div>
</div>
<p>&#8211; script &#8211;</p>
<pre>
package  {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	public class motion1 extends Sprite {
		public function motion1() {
			moveFish()
		}
		private function moveFish():void {
			var _btn:MovieClip = new btn();
			addChild(_btn)
			_btn.x = 10;_btn.y = 10;
			var _fish:MovieClip = new fish();
			_fish.alpha = 0;
			addChild(_fish) ;
			_fish.x = 0;
			_fish.y = stage.stageHeight / 2;
			stage.addEventListener(Event.ENTER_FRAME, function() {
				_fish.x += 5
			});
			_btn.addEventListener(MouseEvent.CLICK, function() {
				_fish.x = 0
				_fish.alpha = 1;
			});
		}
	}
}
</pre>
<p>　</p>
<p>これだと、動きとしては不自然なので、<br />
02.緩急をつけたい<br />
現在地と目的地の一定を足していく。<br />
(stage.stageWidth &#8211; _fish.x)/20<br />
目的地との距離は縮まっていくので、<br />
速度はどんどんゆっくりになる。</p>
<p>　</p>
<div style="border:1px solid white;">
<div id="motion2"></div>
</div>
<p>&#8211; script &#8211;</p>
<pre>
package  {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;

	public class motion2 extends Sprite {

		public function motion2() {
			moveFish()
		}
		private function moveFish():void {
			var _btn:MovieClip = new btn();
			addChild(_btn)
			_btn.x = 10;_btn.y = 10;
			var _fish:MovieClip = new fish();
			_fish.alpha = 0;
			addChild(_fish) ;
			_fish.x = 0;
			_fish.y = stage.stageHeight / 2;
			stage.addEventListener(Event.ENTER_FRAME, function() {
				_fish.x += (stage.stageWidth - _fish.x)/20
			})
			_btn.addEventListener(MouseEvent.CLICK, function() {
				_fish.x = 0
				_fish.alpha = 1;
			});
		}
	}
}
</pre>
<p>　</p>
<p>緩急はつけられるけど、<br />
動きとしては一定の減速運動になってしまうので、<br />
03.sinカーブを使用してみる。<br />
sinのカーブでは-π/2～π/2が使いやすいと思う。</p>
<p>　</p>
<div style="border:1px solid white;">
<div id="motion3"></div>
</div>
<p>&#8211; script &#8211;</p>
<pre>
package  {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;

	public class motion3 extends Sprite {

		public function motion3() {
			moveFish()
		}
		private function moveFish():void {
			var _btn:MovieClip = new btn();
			addChild(_btn)
			_btn.x = 10;_btn.y = 10;
			var _fish:MovieClip = new fish();
			_fish.alpha = 0;
			addChild(_fish);
			//初期の位置
			_fish.x = 0;
			_fish.y = stage.stageHeight / 2;
			var _count:int = 0
			stage.addEventListener(Event.ENTER_FRAME, function() {
				var _angle:Number = -Math.PI/2 + _count/100*Math.PI
				_fish.x = (Math.sin(_angle) + 1) / 2 *stage.stageWidth;
				_count++;
			});
			_btn.addEventListener(MouseEvent.CLICK, function() {
				_count = 0
				_fish.alpha = 1;
			});
		}
	}
}
</pre>
<p>　</p>
<p>次に、<br />
04.速度の概念を明示化する<br />
と加速が簡単に行える。</p>
<p>　</p>
<div style="border:1px solid white;">
<div id="motion4"></div>
</div>
<p>&#8211; script &#8211;</p>
<pre>
package  {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;

	public class motion4 extends Sprite {

		public function motion4() {
			moveFish()
		}
		private function moveFish():void {
			var _btn:MovieClip = new btn();
			addChild(_btn)
			_btn.x = 10;_btn.y = 10;
			var _fish:MovieClip = new fish();
			_fish.alpha = 0;
			addChild(_fish);
			//初期の位置
			_fish.x = 0;
			_fish.y = stage.stageHeight / 2;
			var _v:Number = 0.1

			stage.addEventListener(Event.ENTER_FRAME, function() {
				_fish.x += _v;
				_v = _v * 1.1;
			});
			_btn.addEventListener(MouseEvent.CLICK, function() {
				_v = 0.01;
				_fish.x = 0;
				_fish.alpha = 1;
			});
		}
	}

}
</pre>
<p>　</p>
<p>速度を明示化して、<br />
加速はするけど、<br />
05.目的地にも、ゆっくり到着したいので、<br />
残りの距離の割合(stage.stageWidth-_fish.x)/stage.stageWidth;<br />
を速度に用いてみると</p>
<p>　</p>
<div style="border:1px solid white;">
<div id="motion5"></div>
</div>
<p>&#8211; script &#8211;</p>
<pre>
package  {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	public class motion5 extends Sprite {
		public function motion5() {
			moveFish()
		}
		private function moveFish():void {
			var _btn:MovieClip = new btn();
			addChild(_btn)
			_btn.x = 10; _btn.y = 10;

			var _fish:MovieClip = new fish();
			_fish.alpha = 0;
			addChild(_fish);
			//初期の位置
			_fish.x = 0;
			_fish.y = stage.stageHeight / 2;
			var _v:Number = 0.1

			stage.addEventListener(Event.ENTER_FRAME, function() {
				_fish.x += _v*(stage.stageWidth-_fish.x)/stage.stageWidth;
				_v = _v * 1.1;
			});
			_btn.addEventListener(MouseEvent.CLICK, function() {
				_v = 0.01;
				_fish.x = 0;
				_fish.alpha = 1;
			});
		}
	}

}
</pre>
<p>　</p>
<p>速度の概念とは別に<br />
06.バネの原理で移動をさせる。<br />
バネの力は距離の２乗に比例をするはず。<br />
バネの力だけだと、運動量保存がされてしまう（とまれない）ので、<br />
減速の運動も加える。</p>
<p>　</p>
<div style="border:1px solid white;">
<div id="motion6"></div>
</div>
<p>&#8211; script &#8211;</p>
<pre>
package  {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	public class motion6 extends Sprite {
		public function motion6() {
			moveFish()
		}
		private function moveFish():void {
			var _btn:MovieClip = new btn();
			addChild(_btn)
			_btn.x = 10; _btn.y = 10;

			var _fish:MovieClip = new fish();
			_fish.alpha = 0;
			addChild(_fish);
			//初期の位置
			_fish.x = 0;
			_fish.y = stage.stageHeight / 2;
			var _v:Number = 0.1
			var _k:Number = 0.0003;
			stage.addEventListener(Event.ENTER_FRAME, function() {
				_fish.x += _v;
				_v += Math.abs(stage.stageWidth*3/4 - _fish.x) * (stage.stageWidth*3/4 - _fish.x) * _k;
				_v *= 0.95
			});
			_btn.addEventListener(MouseEvent.CLICK, function() {
				_fish.x = 0;
				_fish.y = stage.stageHeight / 2;
				_v = 0.1
				_fish.alpha = 1;
			});
		}
	}

}
</pre>
<p>　</p>
<p>こうして、いくつか見てみるけど、Tweenerの中身ってどうなっているのかという。<br />
07.決まった時間で移動をさせる。<br />
フレームレートが落ちても一定のスピードで動くように、時間と位置の関係を明示化している。</p>
<p>　</p>
<div style="border:1px solid white;">
<div id="motion7"></div>
</div>
<p>&#8211; script &#8211;</p>
<pre>
package  {

	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;

	public class motion7 extends Sprite {

		public function motion7() {
			moveFish()
		}

		private function moveFish():void {
			var _btn:MovieClip = new btn();
			addChild(_btn)
			_btn.x = 10; _btn.y = 10;

			var _fish:MovieClip = new fish();
			_fish.alpha = 0;
			addChild(_fish);
			//初期の位置
			_fish.x = 0;
			_fish.y = stage.stageHeight / 2;

			var _time = 3;
			var _startTime:Number = new Date().getTime();
			stage.addEventListener(Event.ENTER_FRAME, function() {
				var _nowTime:Number = new Date().getTime()-_startTime;
				_fish.x = (stage.stageWidth - 0) * _nowTime / (1000 * _time)
			});
			_btn.addEventListener(MouseEvent.CLICK, function() {
				_startTime = new Date().getTime();
				_fish.alpha = 1;
			});
		}
	}

}
</pre>
<p>　</p>
<p>上のサンプルだと<br />
transitionがlinerだけど、<br />
08.easeInExpoだと下記のようになる。</p>
<p>　</p>
<div style="border:1px solid white;">
<div id="motion8"></div>
</div>
<p>&#8211; script &#8211;</p>
<pre>
package  {

	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;

	public class motion8 extends Sprite {

		public function motion8() {
			moveFish()
		}

		private function moveFish():void {
			var _btn:MovieClip = new btn();
			addChild(_btn)
			_btn.x = 10;_btn.y = 10;
			var _fish:MovieClip = new fish();
			_fish.alpha = 0;
			addChild(_fish);
			//初期の位置
			_fish.x = 0;
			_fish.y = stage.stageHeight / 2;
			var _time = 2;
			var _startTime:Number = new Date().getTime();
			stage.addEventListener(Event.ENTER_FRAME, function() {
				var _nowTime:Number = new Date().getTime()-_startTime;
				_fish.x = (stage.stageWidth - 0) * _nowTime / (1000 * _time)* _nowTime / (1000 * _time)* _nowTime / (1000 * _time)
			});
			_btn.addEventListener(MouseEvent.CLICK, function() {
				_startTime = new Date().getTime();
				_fish.alpha = 1;
			})
		}
	}

}
</pre>
<p>　</p>
<p><script type="text/javascript">var vars = {};var params = { menu:'false',scale:'noScale',salign:'lt', wmode:'transparent'};var attributes = { id:'motion1', name:'motion1' };swfobject.embedSWF("/file/motion/motion1.swf", "motion1", "760", "150", "8.0.0", "", vars, params, attributes );</script></p>
<p><script type="text/javascript">var vars = {};var params = { menu:'false',scale:'noScale',salign:'lt', wmode:'transparent'};var attributes = { id:'motion2', name:'motion2' };swfobject.embedSWF("/file/motion/motion2.swf", "motion2", "760", "150", "8.0.0", "", vars, params, attributes );</script></p>
<p><script type="text/javascript">var vars = {};var params = { menu:'false',scale:'noScale',salign:'lt', wmode:'transparent'};var attributes = { id:'motion3', name:'motion3' };swfobject.embedSWF("/file/motion/motion3.swf", "motion3", "760", "150", "8.0.0", "", vars, params, attributes );</script></p>
<p><script type="text/javascript">var vars = {};var params = { menu:'false',scale:'noScale',salign:'lt', wmode:'transparent'};var attributes = { id:'motion4', name:'motion4' };swfobject.embedSWF("/file/motion/motion4.swf", "motion4", "760", "150", "8.0.0", "", vars, params, attributes );</script></p>
<p><script type="text/javascript">var vars = {};var params = { menu:'false',scale:'noScale',salign:'lt', wmode:'transparent'};var attributes = { id:'motion5', name:'motion5' };swfobject.embedSWF("/file/motion/motion5.swf", "motion5", "760", "150", "8.0.0", "", vars, params, attributes );</script></p>
<p><script type="text/javascript">var vars = {};var params = { menu:'false',scale:'noScale',salign:'lt', wmode:'transparent'};var attributes = { id:'motion6', name:'motion6' };swfobject.embedSWF("/file/motion/motion6.swf", "motion6", "760", "150", "8.0.0", "", vars, params, attributes );</script></p>
<p><script type="text/javascript">var vars = {};var params = { menu:'false',scale:'noScale',salign:'lt', wmode:'transparent'};var attributes = { id:'motion7', name:'motion7' };swfobject.embedSWF("/file/motion/motion7.swf", "motion7", "760", "150", "8.0.0", "", vars, params, attributes );</script></p>
<p><script type="text/javascript">var vars = {};var params = { menu:'false',scale:'noScale',salign:'lt', wmode:'transparent'};var attributes = { id:'motion8', name:'motion8' };swfobject.embedSWF("/file/motion/motion8.swf", "motion8", "760", "150", "8.0.0", "", vars, params, attributes );</script></p>
]]></content:encoded>
			<wfw:commentRss>http://andante.in/a/?feed=rss2&#038;p=41</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Decorator</title>
		<link>http://andante.in/a/?p=30</link>
		<comments>http://andante.in/a/?p=30#comments</comments>
		<pubDate>Wed, 12 May 2010 05:22:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[デザインパターン]]></category>

		<guid isPermaLink="false">http://andante.in/a/?p=30</guid>
		<description><![CDATA[デザインパターン：Decorator 目的：オブジェクトへ要素の追加を行う。（装飾する。） 　 デコレーションを目的としたクラス。 元となるinterfaceを作成 　 package{ public interface IWidget{ function getDescription():String{} } } 　 文字列を返す。 この値に対して要素を作成する場合 下記の形になる。 　 package{ public class WidgetA implement IWidget{ public function WidgetA(){}; public function getDescription():String{ return "widgetA" } } } 　 となって文字列「widgetA」を作成できる。 このようにしてwidgetB,widgetCなども作成できる。 ここまでは、decoratorクラスでなくて、ただのinterfaceです。 次に、抽象クラスを作成する。 　 package{ public class WidgetDecorator implement IWidget{ protected var decorated:IWidget; public function WidgetDecorator(widget:IWidget){ decorated [...]]]></description>
			<content:encoded><![CDATA[<p>デザインパターン：Decorator<br />
目的：オブジェクトへ要素の追加を行う。（装飾する。）</p>
<p>　</p>
<p>デコレーションを目的としたクラス。<br />
元となるinterfaceを作成</p>
<p>　</p>
<pre>
package{
	public interface IWidget{
		function getDescription():String{}
	}
}
</pre>
<p>　</p>
<p>文字列を返す。<br />
この値に対して要素を作成する場合<br />
下記の形になる。</p>
<p>　</p>
<pre>
package{
	public class WidgetA implement IWidget{
		public function WidgetA(){};
		public function getDescription():String{
			return "widgetA"
		}
	}
}
</pre>
<p>　</p>
<p>となって文字列「widgetA」を作成できる。<br />
このようにしてwidgetB,widgetCなども作成できる。<br />
ここまでは、decoratorクラスでなくて、ただのinterfaceです。<br />
次に、抽象クラスを作成する。</p>
<p>　</p>
<pre>
package{
	public class WidgetDecorator implement IWidget{
		protected var decorated:IWidget;
		public function WidgetDecorator(widget:IWidget){
			decorated = widget
		};
		public function getDescription():String{
			return "α-"+decorated.getDescription()
		}
	}
}
</pre>
<p>　</p>
<p>というクラスを作成した時に<br />
new WidgetDecorator(new WidgetA()).getDescription()<br />
は「α-widgetA」を返す。</p>
<p>　</p>
<p>new WidgetA().getDescription()<br />
は「widgetA」を返す。</p>
<p>　</p>
<p>同様にして<br />
new WidgetDecorator(new WidgetB()).getDescription()<br />
は「α-widgetB」を返す。</p>
<p>　</p>
<p>つまり、装飾（decoration）を<br />
組み合わせで増やす事が出来るようになった。</p>
<p>　</p>
<p>更に、WidgetDecoratorを継承すると<br />
また一つ付加する事ができる。</p>
<p>　</p>
<pre>
package{
	public class widgetPlus extends WidgetDecorator{
		protected var decorated:IWidget;
		public function widgetPlus(widget:IWidget){
			super(widget)
		};
		public function getDescription():String{
			return decorated.getDescription()+"_1"
		}
	}
}
</pre>
<p>　</p>
<p>new widgetPlus(new WidgetA()).getDescription()<br />
は「α-widgetA_1」を返す。</p>
<p>　</p>
<p>装飾を行う上で、implementの方向性とextendsの方向性の<br />
２つを持たせてあげる事で、<br />
組み合わせの広がりを与える事が出来る。</p>
<p>参照：<a href="http://blog.livedoor.jp/kotani08/archives/14997028.html" target="_blank" style="text-decoration:underline">いつもの日記帳:Decoratorパターン</a></p>
]]></content:encoded>
			<wfw:commentRss>http://andante.in/a/?feed=rss2&#038;p=30</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Singleton</title>
		<link>http://andante.in/a/?p=5</link>
		<comments>http://andante.in/a/?p=5#comments</comments>
		<pubDate>Wed, 12 May 2010 03:55:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[デザインパターン]]></category>

		<guid isPermaLink="false">http://andante.in/a/?p=5</guid>
		<description><![CDATA[デザインパターン：Singleton 目的：複数のクラスからアクセスでき、値を保持してくれるクラスを作る。 　 Singletonは複数のクラスから参照できる値を設定する事で 無駄な生成を抑える事や、値の引渡しを簡単にしてくれます。 コードは下記になります。 　 package { public class Singleton { public static var _instance:Singleton; public static function getInstance():Singleton { if ( _instance == null ) { _instance = new Singleton; } return _instance; } } 　 staticってなんだ？ってなる。 staticは「静的な」となじみのない言葉で表現をされるが、カンタンに言うと 「動的」の反対だから、「その場で生成されるものでない。」ので、 「ずっとそこにいるもの。」なのです。 外部からアクセスした時にも「そこにいる」のです。 つまり「動的」だといない事があるので、いつでもアクセスできる為に 「静的」staticに設定をしています。 　 getInstanceを行うと、Singletonのオブジェクトが生成されます。 一度生成されると、再度実行しても既に生成されたオブジェクトが 取得される設計になります。 　 ここが基本設計で、必要なものを足していきます。 　 package { [...]]]></description>
			<content:encoded><![CDATA[<p>デザインパターン：Singleton<br />
目的：複数のクラスからアクセスでき、値を保持してくれるクラスを作る。</p>
<p>　</p>
<p>Singletonは複数のクラスから参照できる値を設定する事で<br />
無駄な生成を抑える事や、値の引渡しを簡単にしてくれます。<br />
コードは下記になります。</p>
<p>　</p>
<pre style="border:1px solid white;padding:10px;">
package {
	public class Singleton {
		public static var _instance:Singleton;
		public static function getInstance():Singleton {
			 if ( _instance == null ) {
				_instance = new Singleton;
			}
		return _instance;
	}
}
</pre>
<p>　</p>
<p>staticってなんだ？ってなる。<br />
staticは「静的な」となじみのない言葉で表現をされるが、カンタンに言うと<br />
「動的」の反対だから、「その場で生成されるものでない。」ので、<br />
「ずっとそこにいるもの。」なのです。<br />
外部からアクセスした時にも「そこにいる」のです。<br />
つまり「動的」だといない事があるので、いつでもアクセスできる為に<br />
「静的」staticに設定をしています。</p>
<p>　</p>
<p>getInstanceを行うと、Singletonのオブジェクトが生成されます。<br />
一度生成されると、再度実行しても既に生成されたオブジェクトが<br />
取得される設計になります。</p>
<p>　</p>
<p>ここが基本設計で、必要なものを足していきます。</p>
<p>　</p>
<pre style="border:1px solid white;padding:10px;">
package {
	public class Singleton {
		public static var _instance:Singleton;
		public static function getInstance():Singleton {
			if ( _instance == null ) {
				_instance = new Singleton;
			}
			return _instance;
		}
		private var _str:String = "something";
		public function set _str(_write:String):void{
			_str = _write;
		}
		public function get _str():String{
			return _str;
		}
	}
}
</pre>
<p>　</p>
<p>上記で示した形で、singletonの要素としての_strを用意する事で、<br />
常にアクセスできるString(文字列)を作成できる。<br />
Bitmapだろうと。なんだろうと。<br />
参考：<a href="http://level0.kayac.com/2009/02/progressionsingleton.php" target="_blank" style="text-decoration:underline;">_level0：Singletonパターンを使ってどのシーンからも変数を参照できるようにする。</a></p>
]]></content:encoded>
			<wfw:commentRss>http://andante.in/a/?feed=rss2&#038;p=5</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>init()</title>
		<link>http://andante.in/a/?p=3</link>
		<comments>http://andante.in/a/?p=3#comments</comments>
		<pubDate>Tue, 11 May 2010 16:41:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[戯言]]></category>

		<guid isPermaLink="false">http://andante.in/a/?p=3</guid>
		<description><![CDATA[今日から、as3.0について、 書きたい。 と思っています。]]></description>
			<content:encoded><![CDATA[<p>今日から、as3.0について、</p>
<p>書きたい。</p>
<p>と思っています。</p>
]]></content:encoded>
			<wfw:commentRss>http://andante.in/a/?feed=rss2&#038;p=3</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello world!</title>
		<link>http://andante.in/a/?p=1</link>
		<comments>http://andante.in/a/?p=1#comments</comments>
		<pubDate>Tue, 11 May 2010 14:15:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://andante.in/a/?p=1</guid>
		<description><![CDATA[WordPress へようこそ。これは最初の投稿です。編集もしくは削除してブログを始めてください !]]></description>
			<content:encoded><![CDATA[<p>WordPress へようこそ。これは最初の投稿です。編集もしくは削除してブログを始めてください !</p>
]]></content:encoded>
			<wfw:commentRss>http://andante.in/a/?feed=rss2&#038;p=1</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

