<?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>きんくまデザイン</title>
	<atom:link href="http://www.kuma-de.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.kuma-de.com</link>
	<description>クライアント系プログラムとイラスト制作</description>
	<lastBuildDate>Fri, 27 Aug 2010 12:37:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>[日記] 最近みた映画とアニメ</title>
		<link>http://www.kuma-de.com/blog/2010-08-27/2298</link>
		<comments>http://www.kuma-de.com/blog/2010-08-27/2298#comments</comments>
		<pubDate>Fri, 27 Aug 2010 12:37:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[1-blog]]></category>
		<category><![CDATA[1-日記]]></category>

		<guid isPermaLink="false">http://www.kuma-de.com/?p=2298</guid>
		<description><![CDATA[こんにちは。きんくまです。
ここ2～3か月でみた映画とアニメのリストなど書いてみます。
映画
■告白
心をわしづかみにされた。

■インセプション
最後のシーンがすごく気になった。

■トイ・ストーリー３
ウッディが最後 [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは。きんくまです。</p>
<p>ここ2～3か月でみた映画とアニメのリストなど書いてみます。</p>
<h3>映画</h3>
<p><a href="http://kokuhaku-shimasu.jp/index.html" target="_blank">■告白</a><br />
心をわしづかみにされた。</p>
<p><img src="http://www.kuma-de.com/wp/wp-content/uploads/2010/08/movie1008_1.jpg" alt="movie1008_1" title="movie1008_1" width="400" height="262" class="alignnone size-full wp-image-2303" /></p>
<p><a href="http://wwws.warnerbros.co.jp/inception/mainsite/" target="_blank">■インセプション</a><br />
最後のシーンがすごく気になった。</p>
<p><img src="http://www.kuma-de.com/wp/wp-content/uploads/2010/08/movie1008_3.jpg" alt="movie1008_3" title="movie1008_3" width="400" height="255" class="alignnone size-full wp-image-2305" /></p>
<p><a href="http://www.disney.co.jp/toystory/#/movies" target="_blank">■トイ・ストーリー３</a><br />
ウッディが最後の方に目にした光景でする決断にやられた。</p>
<p><img src="http://www.kuma-de.com/wp/wp-content/uploads/2010/08/movie1008_2.jpg" alt="movie1008_2" title="movie1008_2" width="400" height="199" class="alignnone size-full wp-image-2304" /></p>
<p><a href="http://colorful-movie.jp/index.html" target="_blank">■カラフル</a><br />
最初、「椿山課長の七日間」なのかなーと思ったら違った。登場人物の描写が丁寧でよかった。</p>
<p><img src="http://www.kuma-de.com/wp/wp-content/uploads/2010/08/movie1008_4.jpg" alt="movie1008_4" title="movie1008_4" width="400" height="222" class="alignnone size-full wp-image-2306" /></p>
<p><a href="http://sky.crawlers.jp/tsushin/" target="_blank">■スカイクロラ</a><br />
押井監督のはいつもよくわかんなくて面白いかもわかんないんだけど、見てる。</p>
<p><img src="http://www.kuma-de.com/wp/wp-content/uploads/2010/08/movie1008_5.jpg" alt="movie1008_5" title="movie1008_5" width="400" height="181" class="alignnone size-full wp-image-2307" /></p>
<p><a href="http://disney-studio.jp/disney/special/remy/index.jsp" target="_blank">■レミーのおいしいレストラン</a><br />
結構リアルなネズミが調理場で料理するのになじめなかったんだけど、面白かった。<br />
もちっと見た目をコミカルなキャラっぽくしてほしかったな。</p>
<p><img src="http://www.kuma-de.com/wp/wp-content/uploads/2010/08/movie1008_6.jpg" alt="movie1008_6" title="movie1008_6" width="400" height="241" class="alignnone size-full wp-image-2308" /></p>
<h3>アニメ</h3>
<p><a href="http://juiz.jp/blog/" target="_blank">■東のエデン</a><br />
映画版をみてみたい。</p>
<p><img src="http://www.kuma-de.com/wp/wp-content/uploads/2010/08/movie1008_7.jpg" alt="movie1008_7" title="movie1008_7" width="400" height="246" class="alignnone size-full wp-image-2309" /></p>
<p><a href="http://www.durarara.com/index2.html" target="_blank">■デュラララ!!</a><br />
勉強会で教えてもらったのでみてみたら、電脳コイル並みに先が気になる話だった。面白い。</p>
<p><img src="http://www.kuma-de.com/wp/wp-content/uploads/2010/08/movie1008_8.jpg" alt="movie1008_8" title="movie1008_8" width="400" height="263" class="alignnone size-full wp-image-2310" /></p>
<p><a href="http://www.aoihana.tv/" target="_blank">■青い花</a><br />
いわゆる百合系ってやつかな？原作のマンガを読んでみたい。</p>
<p><img src="http://www.kuma-de.com/wp/wp-content/uploads/2010/08/movie1008_9.jpg" alt="movie1008_9" title="movie1008_9" width="400" height="272" class="alignnone size-full wp-image-2311" /></p>
<h3>感想</h3>
<p>自分の好きな傾向としては、<br />
・先の気になるストーリー展開の作品<br />
・ストーリーとしては地味だけど、登場人物の心理描写がすごく丁寧に描かれている作品<br />
が好きみたい。特に後者の心理描写が丁寧に描かれているものの方が心に残る。<br />
２つの要素がともにあって、個人的に神アニメだったのは「電脳コイル」です。</p>
<p>学生の頃とかは、時間もあったし単館系の作品を銀座とかに見に行ったりもしたんだけど、今はぜんぜん。<br />
車でちょっといったところにあるショッピングモールのシネコンだけ。<br />
事前に席も押さえられるし便利。<br />
結果的に、大作映画っていうか、有名どころばっかりなんだけど、それで満足。<br />
なんで、あのころはきばってたのかは今じゃわからない。<br />
実際はそこまで映画好きっていうほど映画が好きなわけじゃなかったんだと思う。</p>
<p>チャリとか歩きで気軽に行けるところにTSUTAYAがないせいか、最近ほとんどDVDとかCDを借りなくなった。<br />
そんで、そんな私のためにあるようなのが<a href="http://www.b-ch.com/" target="_blank">バンダイチャンネル</a>とかのオンラインで見れるサイト。</p>
<p>深夜アニメを録画してまでみたいわけじゃなくて、有名どころをそこそこみたいだけなのでちょうどいい感じ。気になったら、一気に全話とか見れてそこもよい。</p>
<p>実写映画の方でもオンラインで見れたらいいなと思って調べてみたら、<a href="http://www.hikaritv.net/" target="_blank">ひかりTV</a>が気になった。ちょっと料金が高そうだけど気になる。もう少し調べてみよう。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kuma-de.com/blog/2010-08-27/2298/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[AS3] FLVPlaybackのカスタムバージョンを作る</title>
		<link>http://www.kuma-de.com/blog/2010-08-16/2289</link>
		<comments>http://www.kuma-de.com/blog/2010-08-16/2289#comments</comments>
		<pubDate>Mon, 16 Aug 2010 09:54:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[1-ActionScript3]]></category>
		<category><![CDATA[1-blog]]></category>
		<category><![CDATA[1-プログラミング]]></category>
		<category><![CDATA[FLVPlayback]]></category>

		<guid isPermaLink="false">http://www.kuma-de.com/?p=2289</guid>
		<description><![CDATA[ほとんど自分用メモです。
FLVPlaybackは手軽にFLVを再生できるコンポーネントです。
それでそのスキンがたくさん選ぶことができます。
だけど、ボリューム調整と再生ボタンと、あとシークバーとみたいに、それらを自由 [...]]]></description>
			<content:encoded><![CDATA[<p>ほとんど自分用メモです。</p>
<p>FLVPlaybackは手軽にFLVを再生できるコンポーネントです。<br />
それでそのスキンがたくさん選ぶことができます。</p>
<p>だけど、ボリューム調整と再生ボタンと、あとシークバーとみたいに、それらを自由に選択することが<br />
デフォルトのものだとできないです。決められた組み合わせのみ。</p>
<p>そんで、どうやったらいいのかな？と思ったら、そのスキンのもとFlaがちゃんとありました。</p>
<p>Winだと<br />
C:\Program Files (x86)\Adobe\Adobe Flash CS4\Common\Configuration\FLVPlayback Skins\FLA\ActionScript 3.0</p>
<p>こんな感じにずらーっと並んでいます。</p>
<p><img src="http://www.kuma-de.com/wp/wp-content/uploads/2010/08/custom_skin1.jpg" alt="custom_skin1" title="custom_skin1" width="288" height="202" class="alignnone size-full wp-image-2290" /></p>
<p>中をひらくとこんなファイルになってました。</p>
<p><img src="http://www.kuma-de.com/wp/wp-content/uploads/2010/08/custom_skin2.jpg" alt="custom_skin2" title="custom_skin2" width="722" height="261" class="alignnone size-full wp-image-2292" /></p>
<p>そんでこれのカスタマイズなんですけど、基本は増やすよりは減らす方向で進めると楽そうです。<br />
自分のほしいボタンの入っているファイルを探して、そのファイルをコピーします。</p>
<p>絶対にオリジナルはとっておくように、コピーは必ずしておかないとマズいです。</p>
<p>そしたら、Layout Layer(Exported to SWF)という左上のところから必要ないところをどんどん選択して<br />
消去してきます。デリートキーで普通に。<br />
その際に、その消すMCのインスタンス名を覚えておきます。</p>
<p>最後にメインタイムラインの1フレーム目のスクリプトを開きます。</p>
<pre class="brush:as3">
// set up linkages
this.pauseButtonDisabledState = "fl.video.skin.PauseButtonDisabled";
this.pauseButtonDownState = "fl.video.skin.PauseButtonDown";
this.pauseButtonNormalState = "fl.video.skin.PauseButtonNormal";
this.pauseButtonOverState = "fl.video.skin.PauseButtonOver";
this.playButtonDisabledState = "fl.video.skin.PlayButtonDisabled";
this.playButtonDownState = "fl.video.skin.PlayButtonDown";
省略
</pre>
<p>さきほど消去したインスタンス名の部分を全部コメントアウトか消していきます。したの方まで<br />
ずらーっと並んでいるので、消し忘れのないように。</p>
<p>何行目かにある</p>
<pre class="brush:as3">
this.minWidth = 230;
</pre>
<p>とかも最少の幅なんで適当に調整するといいかもしれないです。</p>
<p>そんでパブリッシュしてエラーが出なければスキン作成成功。</p>
<p>よみこみ側のFlaファイルのFLVPlaybackのコンポーネントインスペクタパネルを開いて、<br />
パラメータ > skin > カスタムスキンのURLってやったあと、したの入力欄に、<br />
自分で作成したカスタムスキンのswfファイル名を入力すれば完了です。<br />
例）custom_skin.swfとか</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kuma-de.com/blog/2010-08-16/2289/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[iPhone] ボール支配率測定アプリ PossessBallをリリースしました</title>
		<link>http://www.kuma-de.com/blog/1-iphone/2010-08-12/2265</link>
		<comments>http://www.kuma-de.com/blog/1-iphone/2010-08-12/2265#comments</comments>
		<pubDate>Thu, 12 Aug 2010 01:27:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[1-iPhone]]></category>
		<category><![CDATA[ball possession]]></category>
		<category><![CDATA[PossessBall]]></category>

		<guid isPermaLink="false">http://www.kuma-de.com/?p=2265</guid>
		<description><![CDATA[こんにちは。きんくまです。
ついに！はじめてのiPhoneアプリがリリースされましたよ！
PossessBallといいます。
>> PossessBall (iTunes preview)
これはどういうものかというと、 [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは。きんくまです。</p>
<p>ついに！はじめてのiPhoneアプリがリリースされましたよ！<br />
PossessBallといいます。</p>
<p><a href="http://itunes.apple.com/app/possessball/id385697722?mt=8" target="_blank">>> PossessBall (iTunes preview)</a></p>
<p>これはどういうものかというと、サッカーのボール支配率を自分で測定するためのアプリです。</p>
<p><img src="http://www.kuma-de.com/wp/wp-content/uploads/2010/08/Screenshot-2010.07.27-22.33.51.png" alt="Screenshot 2010.07.27 22.33.51" title="Screenshot 2010.07.27 22.33.51" width="320" height="460" class="alignnone size-full wp-image-2266" /></p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/5SxWtevHfTM&amp;hl=ja_JP&amp;fs=1?rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/5SxWtevHfTM&amp;hl=ja_JP&amp;fs=1?rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
<p>iPhone片手に試合を見ながら、Aチームの方がボールを持っていると思ったら、Aボタンを押します。<br />
反対に、Bチームの方だと思ったら、Bボタンを押します。<br />
それで、そのときの支配率が下に表示されるというシンプルなアプリです。</p>
<p>この間のワールドカップ見てるときに思いついたんで（笑）　ものすごく「え？いまさら」感の強いものです、、。<br />
ま、ここからじっくり次の４年にむけていきますよ（笑）</p>
<p>本当のとこ、地味ーに高校のサッカー部のコーチとかマネージャーさんが使ってくれたらいいな。とか思ってたりしてます。<br />
あと、サッカーって世界共通なんで、サッカー人口多そう→ニーズはあるかなー。なんて。</p>
<p>今回はいつも苦手なデザインを頑張りました！</p>
<p><img src="http://www.kuma-de.com/wp/wp-content/uploads/2010/08/Screenshot-2010.07.27-23.41.15.png" alt="Screenshot 2010.07.27 23.41.15" title="Screenshot 2010.07.27 23.41.15" width="320" height="460" class="alignnone size-full wp-image-2268" /></p>
<p>チーム名を変更できます</p>
<p><img src="http://www.kuma-de.com/wp/wp-content/uploads/2010/08/Screenshot-2010.07.27-23.40.44.png" alt="Screenshot 2010.07.27 23.40.44" title="Screenshot 2010.07.27 23.40.44" width="320" height="460" class="alignnone size-full wp-image-2267" /></p>
<p>よろしくお願いします！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kuma-de.com/blog/1-iphone/2010-08-12/2265/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[iphone] アプリ開発日記</title>
		<link>http://www.kuma-de.com/blog/2010-08-06/2277</link>
		<comments>http://www.kuma-de.com/blog/2010-08-06/2277#comments</comments>
		<pubDate>Fri, 06 Aug 2010 07:36:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[1-blog]]></category>
		<category><![CDATA[1-iPhone]]></category>
		<category><![CDATA[OpenGL]]></category>

		<guid isPermaLink="false">http://www.kuma-de.com/?p=2277</guid>
		<description><![CDATA[こんにちは。きんくまです。
暑いですね。
先日ようやく、はじめてのアプリが完成しまして。
さあ、申請だ！と思って、いろいろと見ていたら、
EINっていうアメリカ納税者番号というのをとらなきゃいけないって書いてありまして。 [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは。きんくまです。<br />
暑いですね。</p>
<p>先日ようやく、はじめてのアプリが完成しまして。<br />
さあ、申請だ！と思って、いろいろと見ていたら、<br />
EINっていうアメリカ納税者番号というのをとらなきゃいけないって書いてありまして。</p>
<p>おお、そうかそうかと、申請して待っていたんですね。<br />
そしたら、待ってても来なくて。うーんどうしてなんだろう？と思ったら、返信する際に使われるFAX番号間違ってましたww<br />
それで訂正しなきゃいけないなーなどと思って、またネットを見ていたら、なんと<br />
「EINはとらなくても申請がOKになりました」っていう情報が！<br />
おー、もっと早く言ってよ。なんていうわけで、EINの訂正はおいておいて、早速アプリの申請をしました。<br />
EINの方はたぶん、FAXが通じないからエアメールで送られてくると思います。<br />
「FAX通じないけどどうなってんの？？」とかいうコメントつきで。</p>
<p>そんで、今は審査待ちな状態です。だいたい1～3週間くらい待たされたり、早い人だと2～3日って場合もあるみたいです。<br />
メーラーのリロード何回も押してるんですが、そうやってても、審査は早くなんないみたいで、まだ着てません。</p>
<h3>OpenGL ES</h3>
<p>まってる間に、お仕事で必要になったのでOpenGLっていうのを勉強してました。<br />
OpenGLっていうのは3Dのライブラリです。<br />
言語はC言語です。<br />
Windowsの人はDirectXっていうのを聞いたことがある人もいると思うんですが、あれの仲間みたいなやつで、<br />
3Dを描画するための仕組みです。<br />
OpenGLはOSに依存しないように書いてあるので、いったん仕組みがわかってしまえば、<br />
Windows, Mac, スマートフォン（iPhone、Android）あたりでも使えるみたいです。<br />
（ただし、実際は最終的な描画の仕組みが違うので、コアの部分が共通の書き方ができると思われる）</p>
<p>そんで、OpenGL ESっていうのがあって、これはOpenGLの機能限定版みたいなやつです。<br />
OpenGL ESの中にもバージョンがあって、IPhoneで使えるのは、OpenGL ES1.1とOpenGL ES2.0です。<br />
1.1と2.0は仕組みが違ってるみたいで、かつ2.0が使えるのはiPhone 3GSからなので、<br />
基本1.1を使うようです。</p>
<p>あ、ここで気がついたと思うですけど、やっぱりWinでもMacでもAndroidでも使えるってのは<br />
微妙に違いますね。そのままはまず動きませんね。ただ、考え方の根っこ部分は同じだと<br />
思うので、まあできておいたらいいかなと。</p>
<p>本はまずこの本をざっとやりました。</p>
<p><iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&#038;bc1=FFFFFF&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=kinkumadesign-22&#038;o=9&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;asins=4844328085" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
<p>上の本、すごく面白かったです。<br />
自分にとってAS3の思い出の本は、下の本だったりするんですが、<br />
上のゲームプログラミング本はOpenGLのそれにあたりました。<br />
とても良い本です。</p>
<p><iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&#038;bc1=FFFFFF&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=kinkumadesign-22&#038;o=9&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;asins=4862460496" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
<p>そんで、もう少しOpenGLについて知りたいとこの本を購入。</p>
<p><iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&#038;bc1=FFFFFF&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=kinkumadesign-22&#038;o=9&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;asins=4839932476" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
<p>そしたら、おもいっきり難しかったです。<br />
頑張ればわかんなくもなさそうな内容なんですが、結構濃い感じなんで覚悟きめてやらないと！みたいな。<br />
どちらかというと、OpenGL用のライブラリを自作するような内容でした。<br />
まだソースと内容を流し読みした程度にとどまってます。<br />
でも、上のゲームプログラミング本に載っていない、ライティングの話などがのっているので、<br />
こちらは適宜必要に応じてやっていけばいいんじゃないかと思いました。<br />
実際ライティングとかつけなくても、ゲームは作れるんで。</p>
<p>そんで、OpenGL ESは描画できる手段は用意されているんですけど、AS3でいうところのPV3dみたいな<br />
気軽に使えるような定番ライブラリはまだ特になさそうです。<br />
Cubeとかも全部自分で座標を打たないといけないです。</p>
<p>2Dに限定していえば、<a href="http://www.cocos2d-iphone.org/" target="_blank">cocos2d</a>が有名みたいです。<br />
OpenGLにはgluとかglutっていうライブラリがあるみたいで、それの<a href="http://code.google.com/p/iphone-glu/" target="_blank">iPhone版</a>も開発されているようです。</p>
<p>ただ、それほど複雑なものでなければ自力でなんとかいけそうだと思いました。<br />
特に2Dの方は。<br />
3Dの方も、複雑なポリゴンを読み込むとか大変ですが、（自作しないといけないので）、<br />
PV3dでいうプリミティブ系のやつ（PlaneとかCubeとか）は自分で座標を書いたりしてできないこともなさそうです。</p>
<p>OpenGL使ってなんかゲームを作ってリリースしてみたいなーと思ってる今日この頃です。<br />
ではでは。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kuma-de.com/blog/2010-08-06/2277/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[iOS] Application lifecycle　メモ</title>
		<link>http://www.kuma-de.com/blog/2010-07-26/2257</link>
		<comments>http://www.kuma-de.com/blog/2010-07-26/2257#comments</comments>
		<pubDate>Mon, 26 Jul 2010 12:00:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[1-blog]]></category>
		<category><![CDATA[1-iOS]]></category>

		<guid isPermaLink="false">http://www.kuma-de.com/?p=2257</guid>
		<description><![CDATA[きんくまです。iPhoneの開発メモがしばらく続くと思います。
挙動についてのメモです。
■アプリケーション起動（初回）
1) application:didFinishLaunchingWithOptions
2) a [...]]]></description>
			<content:encoded><![CDATA[<p>きんくまです。iPhoneの開発メモがしばらく続くと思います。<br />
挙動についてのメモです。</p>
<p>■アプリケーション起動（初回）<br />
1) application:didFinishLaunchingWithOptions<br />
2) applicationDidBecomeActive</p>
<p>■homeボタンを押したとき<br />
1) applicationWillResignActive<br />
2) applicationDidEnterBackground</p>
<p>■もう一度アプリケーションを起動したとき（２回目以降）<br />
1) applicationWillEnterForeground<br />
2) applicationDidBecomeActive</p>
<h3>それぞれの役割</h3>
<p>中に書いてあるコメントを訳してみる</p>
<p>■application:didFinishLaunchingWithOptions<br />
アプリケーションの起動時。<br />
viewControllerのviewをwindowにaddする</p>
<p>■applicationWillResignActive</p>
<pre>
    /*
     Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
     Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
     */
</pre>
<p>アプリケーションがアクティブからインアクティブな状態に移行するときに呼ばれる。<br />
一時的な中断（電話がかかってきたりSMSメッセージが届いたりといった）ときや、ユーザーがアプリケーションを終了して、バックグラウンド状態になる際におこる。<br />
このメソッドは継続中のタスクをポーズするのに使ってください。タイマーをやめたり、OpenGL ESのフレームレートを下げたりして。<br />
ゲームはこのメソッドをゲームの中断に使用すべきです。</p>
<p>■applicationDidEnterBackground</p>
<pre>
    /*
     Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
     If your application supports background execution, called instead of applicationWillTerminate: when the user quits.
     */
</pre>
<p>このメソッドは共有リソースのreleaseに使ってください。ユーザーデータの保存、タイマーの中断、また後でアプリが終了するのに備えて、アプリケーションの状態をもとに戻すために必要な現在の情報の保存。<br />
アプリケーションがバックグラウンドをサポートする場合、ユーザーが終了するときに、applicationWillTerminateの代わりに呼んでください。</p>
<p>■applicationWillEnterForeground</p>
<pre>
    /*
     Called as part of  transition from the background to the inactive state: here you can undo many of the changes made on entering the background.
     */
</pre>
<p>バックグラウンドからインアクティブな状態に移るときに呼ばれます。ここで、バックグラウンドによる多くの変更をアンドゥすることができます。</p>
<p>■applicationDidBecomeActive</p>
<pre>
    /*
     Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
     */
</pre>
<p>アプリケーションがインアクティブだった間に中断していた（または開始していなかった）タスクを再開します。もしアプリケーションが前にバックグラウンドだった場合、ユーザーインターフェースのリフレッシュをオプションですることができます。</p>
<p>■applicationWillTerminate</p>
<pre>
    /*
     Called when the application is about to terminate.
     See also applicationDidEnterBackground:.
     */
</pre>
<p>アプリケーションが中断する際に呼ばれます。applicationDidEnterBackgroundを参照してください。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kuma-de.com/blog/2010-07-26/2257/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>東京てら子で発表してきました</title>
		<link>http://www.kuma-de.com/blog/2010-07-24/2249</link>
		<comments>http://www.kuma-de.com/blog/2010-07-24/2249#comments</comments>
		<pubDate>Fri, 23 Jul 2010 23:46:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[1-blog]]></category>
		<category><![CDATA[1-日記]]></category>
		<category><![CDATA[jsflEdit]]></category>

		<guid isPermaLink="false">http://www.kuma-de.com/?p=2249</guid>
		<description><![CDATA[こんにちは。きんくまです。
先週、東京てら子で発表してきました。

>> 東京てら子 6「SWF最適化・制作効率アップ術」
というわけで、以前に作ったjsflEditを発表してきました。
■画面を一度クリックしたあと、キ [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは。きんくまです。<br />
先週、東京てら子で発表してきました。<br />
<a href="http://teraco.jp/2010/06/23-094937.php" target="_blank"><br />
>> 東京てら子 6「SWF最適化・制作効率アップ術」</a></p>
<p>というわけで、以前に作ったjsflEditを発表してきました。</p>
<p>■画面を一度クリックしたあと、キーボードの左右キーでページ送りができます。</p>
<p><script type="text/javascript">
//<![CDATA[
swfobject.embedSWF("/wp/wp-content/uploads/2010/07/jsflEdit_presentation.swf", "/jsflEdit_presentation", "640", "480", "9.0.0");
//]]&gt;
</script></p>
<div class="border_area" style="width: 640px; height:480px">
<div id="/jsflEdit_presentation"></div>
</div>
<p>　</p>
<p>20人くらい参加していて、全員発表しました。<br />
皆さん、こだわるポイントが違っていて、おもしろかったです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kuma-de.com/blog/2010-07-24/2249/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[AS3]1000個のTweenに挑戦 &lt; 俺俺TweenエンジンOreOreTweenを作ってみよう4</title>
		<link>http://www.kuma-de.com/blog/2010-07-15/2234</link>
		<comments>http://www.kuma-de.com/blog/2010-07-15/2234#comments</comments>
		<pubDate>Thu, 15 Jul 2010 07:14:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[1-ActionScript3]]></category>
		<category><![CDATA[1-blog]]></category>
		<category><![CDATA[1-プログラミング]]></category>
		<category><![CDATA[OreOreTween]]></category>

		<guid isPermaLink="false">http://www.kuma-de.com/?p=2234</guid>
		<description><![CDATA[こんにちは。きんくまです。
今回は、前回の課題となっていたEnterframeをひとつのクラスにまとめて最適化してみよう。です。
Event.ENTER_FRAMEは、各インスタンスごとに登録すると重くなる原因となります。
なので、UpdateManagerというクラスを作って、それだけがENTER_FRAMEを呼び出して、
そこに各Tweenのインスタンスを追加・削除することにしました。
今回作ったもの。
玉の数を1000個にしてみました。

//



　
追加・削除の具体的な仕組みは、各Tweenごとに一意となるキーをもたせます。
それをキーとしてManagerのObjectに登録します。
削除するときはそれをまたキーとして削除しました。

package kuma_de
{
	import flash.display.Sprite;
	import flash.events.Event;
	/**
	 * ...
	 * @author KinkumaDesign
	 */
	public class UpdateManager extends Sprite
	{
		private static var _instance:UpdateManager;
		public static function get instance():UpdateManager
		{
			if (_instance == null) {
				_instance = new UpdateManager();
			}
			return _instance;
		}

		private var _tweens:Object;
		private var _isUpdating:Boolean;
		private var _tweenCount:int;

		public function UpdateManager()
		{
			if (_instance == null){
				_tweens = {};
				_isUpdating = false;
				_tweenCount = 0;
			}
		}

		public function add(tween:OreOreTween, key:String):void
		{
			_tweens[key] = tween
			_tweenCount++;
			if (_isUpdating == false) {
				addEventListener(Event.ENTER_FRAME, [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは。きんくまです。</p>
<p>今回は、前回の課題となっていたEnterframeをひとつのクラスにまとめて最適化してみよう。です。</p>
<p>Event.ENTER_FRAMEは、各インスタンスごとに登録すると重くなる原因となります。<br />
なので、UpdateManagerというクラスを作って、それだけがENTER_FRAMEを呼び出して、<br />
そこに各Tweenのインスタンスを追加・削除することにしました。</p>
<p>今回作ったもの。<br />
玉の数を1000個にしてみました。</p>
<p><script type="text/javascript">
//<![CDATA[
swfobject.embedSWF("/wp/wp-content/uploads/2010/07/Tween4.swf", "tween4", "450", "450", "10.0.0");
//]]&gt;
</script></p>
<div class="border_area" style="width: 450px; height:450px">
<div id="tween4"></div>
</div>
<p>　</p>
<p>追加・削除の具体的な仕組みは、各Tweenごとに一意となるキーをもたせます。<br />
それをキーとしてManagerのObjectに登録します。<br />
削除するときはそれをまたキーとして削除しました。</p>
<pre class="brush:as3">
package kuma_de
{
	import flash.display.Sprite;
	import flash.events.Event;
	/**
	 * ...
	 * @author KinkumaDesign
	 */
	public class UpdateManager extends Sprite
	{
		private static var _instance:UpdateManager;
		public static function get instance():UpdateManager
		{
			if (_instance == null) {
				_instance = new UpdateManager();
			}
			return _instance;
		}

		private var _tweens:Object;
		private var _isUpdating:Boolean;
		private var _tweenCount:int;

		public function UpdateManager()
		{
			if (_instance == null){
				_tweens = {};
				_isUpdating = false;
				_tweenCount = 0;
			}
		}

		public function add(tween:OreOreTween, key:String):void
		{
			_tweens[key] = tween
			_tweenCount++;
			if (_isUpdating == false) {
				addEventListener(Event.ENTER_FRAME, update);
				_isUpdating = true;
			}
		}

		public function remove(tween:OreOreTween, key:String):void
		{
			for (var i:String in _tweens) {
				if (i == key) {
					_tweens[key] = null;
					delete _tweens[key];
					_tweenCount--;
				}
			}
			if (_tweenCount == 0) {
				removeEventListener(Event.ENTER_FRAME, update);
				_isUpdating = false;
			}
		}

		private function update(e:Event):void
		{
			var tween:OreOreTween;
			for (var i:String in _tweens) {
				tween = _tweens[i];
				tween.update();
				if (tween.isTweenComplete) {
					_tweens[i] = null;
					delete _tweens[i];
					_tweenCount--;
				}
			}
			if (_tweenCount == 0) {
				removeEventListener(Event.ENTER_FRAME, update);
				_isUpdating = false;
			}
		}
	}

}
</pre>
<p>■OreOreTween</p>
<pre class=brush:as3">
package  kuma_de
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	/**
	 * ...
	 * @author KinkumaDesign
	 */
	public class OreOreTween extends EventDispatcher
	{
		//easing
		public static const EASE_NONE:String = "easeNone";
		public static const EASE_IN_QUAD:String = "easeInQuad";
		public static const EASE_OUT_QUAD:String = "easeOutQuad";
		public static const EASE_IN_OUT_QUAD:String = "easeInOutQuad";
		public static const EASE_OUT_IN_QUAD:String = "easeOutInQuad";
		public static const EASE_IN_CUBIC:String = "easeInCubic";
		public static const EASE_OUT_CUBIC:String = "easeOutCubic";
		public static const EASE_IN_OUT_CUBIC:String = "easeInOutCubic";
		public static const EASE_OUT_IN_CUBIC:String = "easeOutInCubic";
		public static const EASE_IN_QUART:String = "easeInQuart";
		public static const EASE_OUT_QUART:String = "easeOutQuart";
		public static const EASE_IN_OUT_QUART:String = "easeInOutQuart";
		public static const EASE_OUT_IN_QUART:String = "easeOutInQuart";
		public static const EASE_IN_QUINT:String = "easeInQuint";
		public static const EASE_OUT_QUINT:String = "easeOutQuint";
		public static const EASE_IN_OUT_QUINT:String = "easeInOutQuint";
		public static const EASE_OUT_IN_QUINT:String = "easeOutInQuint";
		public static const EASE_IN_SINE:String = "easeInSine";
		public static const EASE_OUT_SINE:String = "easeOutSine";
		public static const EASE_IN_OUT_SINE:String = "easeInOutSine";
		public static const EASE_OUT_IN_SINE:String = "easeOutInSine";
		public static const EASE_IN_EXPO:String = "easeInExpo";
		public static const EASE_OUT_EXPO:String = "easeOutExpo";
		public static const EASE_IN_OUT_EXPO:String = "easeInOutExpo";
		public static const EASE_OUT_IN_EXPO:String = "easeOutInExpo";
		public static const EASE_IN_CIRC:String = "easeInCirc";
		public static const EASE_OUT_CIRC:String = "easeOutCirc";
		public static const EASE_IN_OUT_CIRC:String = "easeInOutCirc";
		public static const EASE_OUT_IN_CIRC:String = "easeOutInCirc";
		public static const EASE_IN_ELASTIC:String = "easeInElastic";
		public static const EASE_OUT_ELASTIC:String = "easeOutElastic";
		public static const EASE_IN_OUT_ELASTIC:String = "easeInOutElastic";
		public static const EASE_OUT_IN_ELASTIC:String = "easeOutInElastic";
		public static const EASE_IN_BACK:String = "easeInBack";
		public static const EASE_OUT_BACK:String = "easeOutBack";
		public static const EASE_IN_OUT_BACK:String = "easeInOutBack";
		public static const EASE_OUT_IN_BACK:String = "easeOutInBack";
		public static const EASE_IN_BOUNCE:String = "easeInBounce";
		public static const EASE_OUT_BOUNCE:String = "easeOutBounce";
		public static const EASE_IN_OUT_BOUNCE:String = "easeInOutBounce";
		public static const EASE_OUT_IN_BOUNCE:String = "easeOutInBounce";

		private var _target:*;
		private var _tweenObjects:Object;
		private var _updateCount:int;
		private var _maxUpdateCount:int;
		private var _isTweening:Boolean;
		public function get isTweening():Boolean
		{
			return _isTweening;
		}
		private var _isTweenComplete:Boolean;
		public function get isTweenComplete():Boolean
		{
			return _isTweenComplete;
		}
		private static var _serialID:int = 0;
		private static const _PRIOR_ID:String = "tween";
		private var _key:String;

		public static function getTweenValues(to:Number, from:Number, duration:Number = 1.0, easing:String = EASE_NONE):Array
		{
			var frameRate:int = 30;//フレームレート

			var values:Array = [];
			var segmentNum:int = Math.floor(frameRate * duration); //分割数

			var i:int;
			var t:Number;
			var dt:Number = 1 / segmentNum;
			var time:Number;
			var value:Number;
			for (i = 0; i <= segmentNum; i++) {
				t = dt * i; //tは0以上1以下の範囲で動く
				time = t * duration; //開始からの時刻（秒）

				value = Equations[easing](time, from, to - from, duration);
				values.push(value);
			}
			return values;
		}

		public function OreOreTween(target:*, to:Object, duration:Number = 1.0, easing:String = EASE_NONE, delay:Number = 0)
		{
			_isTweening = false;
			_isTweenComplete = false;
			_tweenObjects = { };
			_target = target;
			_key = _PRIOR_ID + _serialID;
			_serialID++;

			for (var i:String in to) {
				_tweenObjects[i] = getTweenValues(to[i], target[i], duration, easing);
				_maxUpdateCount = _tweenObjects[i].length;
			}
		}

		public function start():void
		{
			if (!_isTweening)
			{
				_isTweening = true;
				_updateCount = 0;
				var manager:UpdateManager = UpdateManager.instance;
				manager.add(this, _key);
			}
		}

		public function pause():void
		{
			if (_isTweening)
			{
				var manager:UpdateManager = UpdateManager.instance;
				manager.remove(this, _key);
				_isTweening = false;
			}
		}

		public function reset():void
		{
			_updateCount = 0;
		}

		public function resume():void
		{
			if (!_isTweening)
			{
				var manager:UpdateManager = UpdateManager.instance;
				manager.add(this, _key);
				_isTweening = true;
			}
		}

		public function update():void
		{
			//tween終了
			if (_updateCount == _maxUpdateCount)
			{
				_isTweenComplete = true;
				dispatchEvent(new Event(Event.COMPLETE));

			//tween値を適用
			}else {
				var tweenValues:Array;
				var value:Number;
				for (var i:String in _tweenObjects) {
					_target[i] = _tweenObjects[i][_updateCount];
				}
				_updateCount++;
			}
		}
	}
}
</pre>
<p>のこりのクラス<br />
<span id="more-2234"></span></p>
<pre class="brush:as3">
package
{
	import com.bit101.components.HSlider;
	import com.bit101.components.Label;
	import com.bit101.components.List;
	import com.bit101.components.PushButton;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	import kuma_de.OreOreTween;
	import net.hires.debug.Stats;

	/**
	 * ...
	 * @author KinkumaDesign
	 */
	[SWF(width="450",height="450",backgroundColor="0x000000",frameRate="30")]
	public class Main extends Sprite
	{
		public var balls:Array;
		public var ballNum:int = 1000;
		public var tweens:Array;
		public var startPos:Circle;
		public var endPos:Circle;
		public var startBtn:PushButton;
		public var easingList:List;
		public var durationSlider:HSlider;
		public var opacitySlider:HSlider;

		public var ore:OreOreTween;

		public function Main():void
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}

		private function init(e:Event = null):void
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			addChild( new Stats() );

			startPos = new Circle(10, 0xE91283, 1, true);
			addChild(startPos);
			startPos.setPosition(50, 100);

			endPos = new Circle(10, 0xE91283, 1, true);
			addChild(endPos);
			endPos.setPosition(400, 200);

			startBtn = new PushButton(this, 250, 380, "start", startBtnClickHD);

			var label:Label = new Label(this, 100, 280, "EASING");
			label.textField.textColor = 0xffffff;
			var easingListItem:Array = getEasingListItem();
			easingList = new List(this, 100, 300, easingListItem);
			easingList.selectedIndex = easingListItem.length - 6;

			label = new Label(this, 250, 280, "DULATION");
			label.textField.textColor = 0xffffff;

			durationSlider = new HSlider(this, 250, 300, null);
			durationSlider.maximum = 2.0;
			durationSlider.minimum = 0.1;
			durationSlider.tick = 0.1;
			durationSlider.value = 1.1;

			label = new Label(this, 250, 320, "OPACITY");
			label.textField.textColor = 0xffffff;
			opacitySlider = new HSlider(this, 250, 340, null);
			opacitySlider.maximum = 1.0;
			opacitySlider.minimum = 0;
			opacitySlider.tick = 0.01;
			opacitySlider.value = 1;
		}

		private function startBtnClickHD(e:MouseEvent):void
		{
			var i:int;
			var ball:Circle;
			var tween:OreOreTween;
			if (ore == null) {
				var duration:Number = durationSlider.value;
				var easing:String = String(easingList.selectedItem);

				balls = [];
				tweens = [];

				for (i = 0; i < ballNum; i++) {
					ball = new Circle(3, 0xffffff * Math.random());
					addChild(ball);
					//初期位置へ
					var offset:Array = getRandomOffSet();
					ball.setPosition(startPos.x + offset[0], startPos.y + offset[1]);
					ball.alpha = 1;
					balls.push(ball);

					//使い方
					ore = new OreOreTween(ball, {
						x:endPos.x,
						y:endPos.y,
						alpha:opacitySlider.value
						}, duration, easing);
					if (i == ballNum - 1) {
						ore.addEventListener(Event.COMPLETE, oreCompleteHD);
					}
					ore.start();
					tweens.push(ore);
				}

				startBtn.label = "PAUSE";
			}else if (ore.isTweening) {
				for (i = 0; i < ballNum; i++) {
					tween = tweens[i];
					tween.pause();
				}
//				ore.pause();
				startBtn.label = "RESUME";
			}else if (!ore.isTweening) {
				for (i = 0; i < ballNum; i++) {
					tween = tweens[i];
					tween.resume();
				}
//				ore.resume();
				startBtn.label = "PAUSE";
			}
		}

		private function getRandomOffSet():Array
		{
			var rad:Number = Math.PI * 2 * Math.random();
			var radius:Number = 100 * Math.random();
			return [Math.cos(rad) * radius, Math.sin(rad) * radius];
		}

		private function oreCompleteHD(e:Event):void
		{
			ore.removeEventListener(Event.COMPLETE, oreCompleteHD);
			ore = null;
			var i:int;
			var ball:Circle;
			for (i = 0; i < ballNum; i++) {
				ball = balls[i];
				removeChild(ball);
				ball = null;
			}
			startBtn.label = "START";
		}

		private function getEasingListItem():Array
		{
			var ar:Array = [
			"easeNone",
			"easeInQuad",
			"easeOutQuad",
			"easeInOutQuad",
			"easeOutInQuad",
			"easeInCubic",
			"easeOutCubic",
			"easeInOutCubic",
			"easeOutInCubic",
			"easeInQuart",
			"easeOutQuart",
			"easeInOutQuart",
			"easeOutInQuart",
			"easeInQuint",
			"easeOutQuint",
			"easeInOutQuint",
			"easeOutInQuint",
			"easeInSine",
			"easeOutSine",
			"easeInOutSine",
			"easeOutInSine",
			"easeInExpo",
			"easeOutExpo",
			"easeInOutExpo",
			"easeOutInExpo",
			"easeInCirc",
			"easeOutCirc",
			"easeInOutCirc",
			"easeOutInCirc",
			"easeInElastic",
			"easeOutElastic",
			"easeInOutElastic",
			"easeOutInElastic",
			"easeInBack",
			"easeOutBack",
			"easeInOutBack",
			"easeOutInBack",
			"easeInBounce",
			"easeOutBounce",
			"easeInOutBounce",
			"easeOutInBounce"
			];
			return ar;
		}
	}

}
</pre>
<p>他のクラスは前回と同じなんで割愛します。<br />
ソースコード一式を<a href="/wp/wp-content/uploads/2010/07/tween4.zip">アップ</a>しましたので、興味があったら見てください。</p>
<h3>作ってみての感想とか</h3>
<p>とりあえず、今回で俺俺Tweenは完了とします。<br />
あとは、フィルター処理やそれぞれの個性となるような機能を追加していってみたら面白いかもしれないです。</p>
<p>今回のOreOreTweenだけであれば、</p>
<p>・OreOreTween（Tweenのメインクラス）<br />
・Equations（イージング）<br />
・UpdateManager（最適化用のEnterframeをひきうけるユーティリティ）</p>
<p>の３つのクラスだけでできることがわかりました。<br />
意外と少ない要素でできるんだなーと。<br />
なんで、Tweenライブラリのクラス数が多いものは、基本部分ではなくそれぞれの独自機能に<br />
多くの容量を割いているのではないかと思いました。<br />
また、今回作ったものは1000個のSpriteでフレームレートがさがってきているので、<br />
このあたりの最適化もいろいろと工夫されているんじゃないかと思いました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kuma-de.com/blog/2010-07-15/2234/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[AS3]複数プロパティの対応、終了イベントの発行 &lt; 俺俺TweenエンジンOreOreTweenを作ってみよう3</title>
		<link>http://www.kuma-de.com/blog/2010-07-10/2213</link>
		<comments>http://www.kuma-de.com/blog/2010-07-10/2213#comments</comments>
		<pubDate>Sat, 10 Jul 2010 05:55:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[1-ActionScript3]]></category>
		<category><![CDATA[1-blog]]></category>
		<category><![CDATA[1-プログラミング]]></category>
		<category><![CDATA[OreOreTween]]></category>

		<guid isPermaLink="false">http://www.kuma-de.com/?p=2213</guid>
		<description><![CDATA[こんにちは。きんくまです。
今週はObjective-C頑張ってました。
さて、OreOreTweenです。
今回は複数プロパティの対応と、終了イベントの発行に対応します。
今回作ったものです。
赤い丸はドラッグすること [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは。きんくまです。<br />
今週はObjective-C頑張ってました。</p>
<p>さて、OreOreTweenです。<br />
今回は複数プロパティの対応と、終了イベントの発行に対応します。</p>
<p>今回作ったものです。<br />
赤い丸はドラッグすることができます。<br />
新たにOPACITY（透明度）のスライダもつけてみました。<br />
ポーズと、レジュームにも対応しました。</p>
<p><script type="text/javascript">
//<![CDATA[
swfobject.embedSWF("/wp/wp-content/uploads/2010/07/Tween3.swf", "tween3", "450", "450", "10.0.0");
//]]&gt;
</script></p>
<div class="border_area" style="width: 450px; height:450px">
<div id="tween3"></div>
</div>
<p>　</p>
<p>実は、前回でTweenエンジンは既に完成しているので、残作業をちまちまやっていくだけです。<br />
前回までは、x座標しかTweenすることができなかったので、y座標とか、alphaとかそういうのに対応しましょうという感じです。<br />
そんで、使うときのコードはこんな感じにしました。</p>
<pre class="brush:as3">
			//使い方
			var ore:OreOreTween = new OreOreTween(ball, {
				x:endPos.x,
				y:endPos.y,
				alpha:opacitySlider.value
				}, duration, easing);
			ore.addEventListener(Event.COMPLETE, oreCompleteHD);
			ore.start();
</pre>
<p>クラスの変更点としては、<br />
・イベントの発行（dispatchEvent）ができるようにEventDispatcherのサブクラスとする<br />
・Event.ENTER_FRAMEがEventDispatcherだと作動しなかったので仕方なくSpriteにした<br />
・Mainでおこなっていた、ターゲットへのプロパティの適用をOreOreTweenでもつようにする<br />
・start,pause,resumeのメソッド追加</p>
<p>という感じでしょうか。<br />
自分で作ってみて驚いたのですが、イージングの定数部分をぬかした基本的なプログラム部分の行数は意外と短いです。</p>
<p>このままだと、インスタンスを生成するごとにEvent.ENTER_FRAMEを呼び出しちゃっているので、次回はそれをまとめるクラスを作ってみようと思います。<br />
あと、delayの実装もしてなかったので、その辺もかな。</p>
<p>以下ソースです。<br />
<span id="more-2213"></span></p>
<p>■OreOreTween</p>
<pre class="brush:as3">
package  kuma_de
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	/**
	 * ...
	 * @author KinkumaDesign
	 */
	public class OreOreTween extends Sprite
	{
		//easing
		public static const EASE_NONE:String = "easeNone";
		public static const EASE_IN_QUAD:String = "easeInQuad";
		public static const EASE_OUT_QUAD:String = "easeOutQuad";
		public static const EASE_IN_OUT_QUAD:String = "easeInOutQuad";
		public static const EASE_OUT_IN_QUAD:String = "easeOutInQuad";
		public static const EASE_IN_CUBIC:String = "easeInCubic";
		public static const EASE_OUT_CUBIC:String = "easeOutCubic";
		public static const EASE_IN_OUT_CUBIC:String = "easeInOutCubic";
		public static const EASE_OUT_IN_CUBIC:String = "easeOutInCubic";
		public static const EASE_IN_QUART:String = "easeInQuart";
		public static const EASE_OUT_QUART:String = "easeOutQuart";
		public static const EASE_IN_OUT_QUART:String = "easeInOutQuart";
		public static const EASE_OUT_IN_QUART:String = "easeOutInQuart";
		public static const EASE_IN_QUINT:String = "easeInQuint";
		public static const EASE_OUT_QUINT:String = "easeOutQuint";
		public static const EASE_IN_OUT_QUINT:String = "easeInOutQuint";
		public static const EASE_OUT_IN_QUINT:String = "easeOutInQuint";
		public static const EASE_IN_SINE:String = "easeInSine";
		public static const EASE_OUT_SINE:String = "easeOutSine";
		public static const EASE_IN_OUT_SINE:String = "easeInOutSine";
		public static const EASE_OUT_IN_SINE:String = "easeOutInSine";
		public static const EASE_IN_EXPO:String = "easeInExpo";
		public static const EASE_OUT_EXPO:String = "easeOutExpo";
		public static const EASE_IN_OUT_EXPO:String = "easeInOutExpo";
		public static const EASE_OUT_IN_EXPO:String = "easeOutInExpo";
		public static const EASE_IN_CIRC:String = "easeInCirc";
		public static const EASE_OUT_CIRC:String = "easeOutCirc";
		public static const EASE_IN_OUT_CIRC:String = "easeInOutCirc";
		public static const EASE_OUT_IN_CIRC:String = "easeOutInCirc";
		public static const EASE_IN_ELASTIC:String = "easeInElastic";
		public static const EASE_OUT_ELASTIC:String = "easeOutElastic";
		public static const EASE_IN_OUT_ELASTIC:String = "easeInOutElastic";
		public static const EASE_OUT_IN_ELASTIC:String = "easeOutInElastic";
		public static const EASE_IN_BACK:String = "easeInBack";
		public static const EASE_OUT_BACK:String = "easeOutBack";
		public static const EASE_IN_OUT_BACK:String = "easeInOutBack";
		public static const EASE_OUT_IN_BACK:String = "easeOutInBack";
		public static const EASE_IN_BOUNCE:String = "easeInBounce";
		public static const EASE_OUT_BOUNCE:String = "easeOutBounce";
		public static const EASE_IN_OUT_BOUNCE:String = "easeInOutBounce";
		public static const EASE_OUT_IN_BOUNCE:String = "easeOutInBounce";

		private var _target:*;
		private var _tweenObjects:Object;
		private var _updateCount:int;
		private var _maxUpdateCount:int;
		private var _isTweening:Boolean;
		public function get isTweening():Boolean
		{
			return _isTweening;
		}

		public static function getTweenValues(to:Number, from:Number, duration:Number = 1.0, easing:String = EASE_NONE):Array
		{
			var frameRate:int = 30;//フレームレート

			var values:Array = [];
			var segmentNum:int = Math.floor(frameRate * duration); //分割数

			var i:int;
			var t:Number;
			var dt:Number = 1 / segmentNum;
			var time:Number;
			var value:Number;
			for (i = 0; i <= segmentNum; i++) {
				t = dt * i; //tは0以上1以下の範囲で動く
				time = t * duration; //開始からの時刻（秒）

				value = Equations[easing](time, from, to - from, duration);
				values.push(value);
			}
			return values;
		}

		public function OreOreTween(target:*, to:Object, duration:Number = 1.0, easing:String = EASE_NONE, delay:Number = 0)
		{
			_isTweening = false;
			_tweenObjects = { };
			_target = target;

			for (var i:String in to) {
				_tweenObjects[i] = getTweenValues(to[i], target[i], duration, easing);
				_maxUpdateCount = _tweenObjects[i].length;
			}
		}

		public function start():void
		{
			if (!_isTweening)
			{
				_isTweening = true;
				_updateCount = 0;
				addEventListener(Event.ENTER_FRAME, update);
			}
		}

		public function pause():void
		{
			if (_isTweening)
			{
				removeEventListener(Event.ENTER_FRAME, update);
				_isTweening = false;
			}
		}

		public function reset():void
		{
			_updateCount = 0;
		}

		public function resume():void
		{
			if (!_isTweening)
			{
				addEventListener(Event.ENTER_FRAME, update);
				_isTweening = true;
			}
		}

		private function update(e:Event):void
		{
			//tween終了
			if (_updateCount == _maxUpdateCount)
			{
				pause();
				dispatchEvent(new Event(Event.COMPLETE));

			//tween値を適用
			}else {
				var tweenValues:Array;
				var value:Number;
				for (var i:String in _tweenObjects) {
					_target[i] = _tweenObjects[i][_updateCount];
				}
				_updateCount++;
			}
		}
	}
}
</pre>
<p>■Main</p>
<pre class="brush:as3">
package
{
	import com.bit101.components.HSlider;
	import com.bit101.components.Label;
	import com.bit101.components.List;
	import com.bit101.components.PushButton;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	import kuma_de.OreOreTween;

	/**
	 * ...
	 * @author KinkumaDesign
	 */
	[SWF(width="450",height="450",backgroundColor="0x000000",frameRate="30")]
	public class Main extends Sprite
	{
		public var ball:Circle;
		public var startPos:Circle;
		public var endPos:Circle;
		public var startBtn:PushButton;
		public var easingList:List;
		public var durationSlider:HSlider;
		public var opacitySlider:HSlider;

		public var ore:OreOreTween;

		public function Main():void
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}

		private function init(e:Event = null):void
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);

			ball = new Circle(20, 0x1ECAE8);
			addChild(ball);
			ball.setPosition(50, 100);

			startPos = new Circle(10, 0xE91283, 1, true);
			addChild(startPos);
			startPos.setPosition(50, 100);

			endPos = new Circle(10, 0xE91283, 1, true);
			addChild(endPos);
			endPos.setPosition(400, 200);

			startBtn = new PushButton(this, 250, 380, "start", startBtnClickHD);

			var label:Label = new Label(this, 100, 280, "EASING");
			label.textField.textColor = 0xffffff;
			var easingListItem:Array = getEasingListItem();
			easingList = new List(this, 100, 300, easingListItem);
			easingList.selectedIndex = 1;

			label = new Label(this, 250, 280, "DULATION");
			label.textField.textColor = 0xffffff;

			durationSlider = new HSlider(this, 250, 300, null);
			durationSlider.maximum = 2.0;
			durationSlider.minimum = 0.1;
			durationSlider.tick = 0.1;
			durationSlider.value = 1.1;

			label = new Label(this, 250, 320, "OPACITY");
			label.textField.textColor = 0xffffff;
			opacitySlider = new HSlider(this, 250, 340, null);
			opacitySlider.maximum = 1.0;
			opacitySlider.minimum = 0;
			opacitySlider.tick = 0.01;
			opacitySlider.value = 0;
		}

		private function startBtnClickHD(e:MouseEvent):void
		{
			if (ore == null) {
				//初期位置へ
				ball.setPosition(startPos.x, startPos.y);
				ball.alpha = 1;

				var duration:Number = durationSlider.value;
				var easing:String = String(easingList.selectedItem);

				//使い方
				ore = new OreOreTween(ball, {
					x:endPos.x,
					y:endPos.y,
					alpha:opacitySlider.value
					}, duration, easing);
				ore.addEventListener(Event.COMPLETE, oreCompleteHD);
				ore.start();

				startBtn.label = "PAUSE";
			}else if (ore.isTweening) {
				ore.pause();
				startBtn.label = "RESUME";
			}else if (!ore.isTweening) {
				ore.resume();
				startBtn.label = "PAUSE";
			}
		}

		private function oreCompleteHD(e:Event):void
		{
			ore.removeEventListener(Event.COMPLETE, oreCompleteHD);
			ore = null;
			startBtn.label = "START";
		}

		private function getEasingListItem():Array
		{
			var ar:Array = [
			"easeNone",
			"easeInQuad",
			"easeOutQuad",
			"easeInOutQuad",
			"easeOutInQuad",
			"easeInCubic",
			"easeOutCubic",
			"easeInOutCubic",
			"easeOutInCubic",
			"easeInQuart",
			"easeOutQuart",
			"easeInOutQuart",
			"easeOutInQuart",
			"easeInQuint",
			"easeOutQuint",
			"easeInOutQuint",
			"easeOutInQuint",
			"easeInSine",
			"easeOutSine",
			"easeInOutSine",
			"easeOutInSine",
			"easeInExpo",
			"easeOutExpo",
			"easeInOutExpo",
			"easeOutInExpo",
			"easeInCirc",
			"easeOutCirc",
			"easeInOutCirc",
			"easeOutInCirc",
			"easeInElastic",
			"easeOutElastic",
			"easeInOutElastic",
			"easeOutInElastic",
			"easeInBack",
			"easeOutBack",
			"easeInOutBack",
			"easeOutInBack",
			"easeInBounce",
			"easeOutBounce",
			"easeInOutBounce",
			"easeOutInBounce"
			];
			return ar;
		}
	}

}
</pre>
<p>■Circle</p>
<pre class="brush:as3">
package
{
	import flash.display.Graphics;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	/**
	 * ...
	 * @author KinkumaDesign
	 */
	public class Circle extends Sprite
	{
		public function Circle(radius:Number = 5, color:int = 0, alpha:Number = 1, draggable:Boolean = false)
		{
			var g:Graphics = this.graphics;
			g.beginFill(color, alpha);
			g.drawCircle(0, 0, radius);
			g.endFill();

			if (draggable)
			{
				addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHD);
				buttonMode = true;
			}
		}

		private function mouseDownHD(e:MouseEvent):void
		{
			if (stage != null)
			{
				stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHD);
				startDrag();
			}
		}

		private function mouseUpHD(e:MouseEvent):void
		{
			stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHD);
			stopDrag();
		}

		public function setPosition(posX:Number, posY:Number):void
		{
			x = posX;
			y = posY;
		}
	}

}
</pre>
<p>■Equations</p>
<pre class="brush:as3">
/*
Licensed under the MIT License

Copyright (c) 2006-2008 Zeh Fernando, Nate Chatellier, Arthur Debert and Francis
Turmel

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

http://code.google.com/p/tweener/
http://code.google.com/p/tweener/wiki/License

-------------------------------------------------------------------------------------

Disclaimer for Robert Penner's Easing Equations license:

TERMS OF USE - EASING EQUATIONS

Open source under the BSD License.

Copyright © 2001 Robert Penner
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
    * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

package  kuma_de
{
	/**
	 * ...
	 * @author KinkumaDesign
	 */
	public class Equations
	{

	// ==================================================================================================================================
	// TWEENING EQUATIONS functions -----------------------------------------------------------------------------------------------------
	// (the original equations are Robert Penner's work as mentioned on the disclaimer)
	// (the original code is from Tweener)

	// ==================================================================================================================================
	// TWEENING EQUATIONS functions -----------------------------------------------------------------------------------------------------
	// (the original equations are Robert Penner's work as mentioned on the disclaimer)

		/**
		 * Easing equation function for a simple linear tweening, with no easing.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeNone (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return c*t/d + b;
		}

		/**
		 * Easing equation function for a quadratic (t^2) easing in: accelerating from zero velocity.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeInQuad (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return c*(t/=d)*t + b;
		}

		/**
		 * Easing equation function for a quadratic (t^2) easing out: decelerating to zero velocity.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeOutQuad (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return -c *(t/=d)*(t-2) + b;
		}

		/**
		 * Easing equation function for a quadratic (t^2) easing in/out: acceleration until halfway, then deceleration.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeInOutQuad (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if ((t/=d/2) < 1) return c/2*t*t + b;
			return -c/2 * ((--t)*(t-2) - 1) + b;
		}

		/**
		 * Easing equation function for a quadratic (t^2) easing out/in: deceleration until halfway, then acceleration.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeOutInQuad (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if (t < d/2) return easeOutQuad (t*2, b, c/2, d, p_params);
			return easeInQuad((t*2)-d, b+c/2, c/2, d, p_params);
		}

		/**
		 * Easing equation function for a cubic (t^3) easing in: accelerating from zero velocity.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeInCubic (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return c*(t/=d)*t*t + b;
		}

		/**
		 * Easing equation function for a cubic (t^3) easing out: decelerating from zero velocity.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeOutCubic (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return c*((t=t/d-1)*t*t + 1) + b;
		}

		/**
		 * Easing equation function for a cubic (t^3) easing in/out: acceleration until halfway, then deceleration.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeInOutCubic (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if ((t/=d/2) < 1) return c/2*t*t*t + b;
			return c/2*((t-=2)*t*t + 2) + b;
		}

		/**
		 * Easing equation function for a cubic (t^3) easing out/in: deceleration until halfway, then acceleration.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeOutInCubic (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if (t < d/2) return easeOutCubic (t*2, b, c/2, d, p_params);
			return easeInCubic((t*2)-d, b+c/2, c/2, d, p_params);
		}

		/**
		 * Easing equation function for a quartic (t^4) easing in: accelerating from zero velocity.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeInQuart (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return c*(t/=d)*t*t*t + b;
		}

		/**
		 * Easing equation function for a quartic (t^4) easing out: decelerating from zero velocity.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeOutQuart (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return -c * ((t=t/d-1)*t*t*t - 1) + b;
		}

		/**
		 * Easing equation function for a quartic (t^4) easing in/out: acceleration until halfway, then deceleration.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeInOutQuart (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
			return -c/2 * ((t-=2)*t*t*t - 2) + b;
		}

		/**
		 * Easing equation function for a quartic (t^4) easing out/in: deceleration until halfway, then acceleration.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeOutInQuart (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if (t < d/2) return easeOutQuart (t*2, b, c/2, d, p_params);
			return easeInQuart((t*2)-d, b+c/2, c/2, d, p_params);
		}

		/**
		 * Easing equation function for a quintic (t^5) easing in: accelerating from zero velocity.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeInQuint (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return c*(t/=d)*t*t*t*t + b;
		}

		/**
		 * Easing equation function for a quintic (t^5) easing out: decelerating from zero velocity.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeOutQuint (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return c*((t=t/d-1)*t*t*t*t + 1) + b;
		}

		/**
		 * Easing equation function for a quintic (t^5) easing in/out: acceleration until halfway, then deceleration.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeInOutQuint (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
			return c/2*((t-=2)*t*t*t*t + 2) + b;
		}

		/**
		 * Easing equation function for a quintic (t^5) easing out/in: deceleration until halfway, then acceleration.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeOutInQuint (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if (t < d/2) return easeOutQuint (t*2, b, c/2, d, p_params);
			return easeInQuint((t*2)-d, b+c/2, c/2, d, p_params);
		}

		/**
		 * Easing equation function for a sinusoidal (sin(t)) easing in: accelerating from zero velocity.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeInSine (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
		}

		/**
		 * Easing equation function for a sinusoidal (sin(t)) easing out: decelerating from zero velocity.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeOutSine (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return c * Math.sin(t/d * (Math.PI/2)) + b;
		}

		/**
		 * Easing equation function for a sinusoidal (sin(t)) easing in/out: acceleration until halfway, then deceleration.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeInOutSine (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
		}

		/**
		 * Easing equation function for a sinusoidal (sin(t)) easing out/in: deceleration until halfway, then acceleration.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeOutInSine (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if (t < d/2) return easeOutSine (t*2, b, c/2, d, p_params);
			return easeInSine((t*2)-d, b+c/2, c/2, d, p_params);
		}

		/**
		 * Easing equation function for an exponential (2^t) easing in: accelerating from zero velocity.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeInExpo (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b - c * 0.001;
		}

		/**
		 * Easing equation function for an exponential (2^t) easing out: decelerating from zero velocity.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeOutExpo (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return (t==d) ? b+c : c * 1.001 * (-Math.pow(2, -10 * t/d) + 1) + b;
		}

		/**
		 * Easing equation function for an exponential (2^t) easing in/out: acceleration until halfway, then deceleration.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeInOutExpo (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if (t==0) return b;
			if (t==d) return b+c;
			if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b - c * 0.0005;
			return c/2 * 1.0005 * (-Math.pow(2, -10 * --t) + 2) + b;
		}

		/**
		 * Easing equation function for an exponential (2^t) easing out/in: deceleration until halfway, then acceleration.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeOutInExpo (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if (t < d/2) return easeOutExpo (t*2, b, c/2, d, p_params);
			return easeInExpo((t*2)-d, b+c/2, c/2, d, p_params);
		}

		/**
		 * Easing equation function for a circular (sqrt(1-t^2)) easing in: accelerating from zero velocity.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeInCirc (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
		}

		/**
		 * Easing equation function for a circular (sqrt(1-t^2)) easing out: decelerating from zero velocity.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeOutCirc (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
		}

		/**
		 * Easing equation function for a circular (sqrt(1-t^2)) easing in/out: acceleration until halfway, then deceleration.
 		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeInOutCirc (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
			return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
		}

		/**
		 * Easing equation function for a circular (sqrt(1-t^2)) easing out/in: deceleration until halfway, then acceleration.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeOutInCirc (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if (t < d/2) return easeOutCirc (t*2, b, c/2, d, p_params);
			return easeInCirc((t*2)-d, b+c/2, c/2, d, p_params);
		}

		/**
		 * Easing equation function for an elastic (exponentially decaying sine wave) easing in: accelerating from zero velocity.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @param a		Amplitude.
		 * @param p		Period.
		 * @return		The correct value.
		 */
		public static function easeInElastic (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if (t==0) return b;
			if ((t/=d)==1) return b+c;
			var p:Number = !Boolean(p_params) || isNaN(p_params.period) ? d*.3 : p_params.period;
			var s:Number;
			var a:Number = !Boolean(p_params) || isNaN(p_params.amplitude) ? 0 : p_params.amplitude;
			if (!Boolean(a) || a < Math.abs(c)) {
				a = c;
				s = p/4;
			} else {
				s = p/(2*Math.PI) * Math.asin (c/a);
			}
			return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
		}

		/**
		 * Easing equation function for an elastic (exponentially decaying sine wave) easing out: decelerating from zero velocity.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @param a		Amplitude.
		 * @param p		Period.
		 * @return		The correct value.
		 */
		public static function easeOutElastic (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if (t==0) return b;
			if ((t/=d)==1) return b+c;
			var p:Number = !Boolean(p_params) || isNaN(p_params.period) ? d*.3 : p_params.period;
			var s:Number;
			var a:Number = !Boolean(p_params) || isNaN(p_params.amplitude) ? 0 : p_params.amplitude;
			if (!Boolean(a) || a < Math.abs(c)) {
				a = c;
				s = p/4;
			} else {
				s = p/(2*Math.PI) * Math.asin (c/a);
			}
			return (a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b);
		}

		/**
		 * Easing equation function for an elastic (exponentially decaying sine wave) easing in/out: acceleration until halfway, then deceleration.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @param a		Amplitude.
		 * @param p		Period.
		 * @return		The correct value.
		 */
		public static function easeInOutElastic (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if (t==0) return b;
			if ((t/=d/2)==2) return b+c;
			var p:Number = !Boolean(p_params) || isNaN(p_params.period) ? d*(.3*1.5) : p_params.period;
			var s:Number;
			var a:Number = !Boolean(p_params) || isNaN(p_params.amplitude) ? 0 : p_params.amplitude;
			if (!Boolean(a) || a < Math.abs(c)) {
				a = c;
				s = p/4;
			} else {
				s = p/(2*Math.PI) * Math.asin (c/a);
			}
			if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
			return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
		}

		/**
		 * Easing equation function for an elastic (exponentially decaying sine wave) easing out/in: deceleration until halfway, then acceleration.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @param a		Amplitude.
		 * @param p		Period.
		 * @return		The correct value.
		 */
		public static function easeOutInElastic (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if (t < d/2) return easeOutElastic (t*2, b, c/2, d, p_params);
			return easeInElastic((t*2)-d, b+c/2, c/2, d, p_params);
		}

		/**
		 * Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing in: accelerating from zero velocity.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @param s		Overshoot ammount: higher s means greater overshoot (0 produces cubic easing with no overshoot, and the default value of 1.70158 produces an overshoot of 10 percent).
		 * @return		The correct value.
		 */
		public static function easeInBack (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			var s:Number = !Boolean(p_params) || isNaN(p_params.overshoot) ? 1.70158 : p_params.overshoot;
			return c*(t/=d)*t*((s+1)*t - s) + b;
		}

		/**
		 * Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing out: decelerating from zero velocity.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @param s		Overshoot ammount: higher s means greater overshoot (0 produces cubic easing with no overshoot, and the default value of 1.70158 produces an overshoot of 10 percent).
		 * @return		The correct value.
		 */
		public static function easeOutBack (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			var s:Number = !Boolean(p_params) || isNaN(p_params.overshoot) ? 1.70158 : p_params.overshoot;
			return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
		}

		/**
		 * Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing in/out: acceleration until halfway, then deceleration.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @param s		Overshoot ammount: higher s means greater overshoot (0 produces cubic easing with no overshoot, and the default value of 1.70158 produces an overshoot of 10 percent).
		 * @return		The correct value.
		 */
		public static function easeInOutBack (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			var s:Number = !Boolean(p_params) || isNaN(p_params.overshoot) ? 1.70158 : p_params.overshoot;
			if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
			return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
		}

		/**
		 * Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing out/in: deceleration until halfway, then acceleration.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @param s		Overshoot ammount: higher s means greater overshoot (0 produces cubic easing with no overshoot, and the default value of 1.70158 produces an overshoot of 10 percent).
		 * @return		The correct value.
		 */
		public static function easeOutInBack (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if (t < d/2) return easeOutBack (t*2, b, c/2, d, p_params);
			return easeInBack((t*2)-d, b+c/2, c/2, d, p_params);
		}

		/**
		 * Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in: accelerating from zero velocity.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeInBounce (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return c - easeOutBounce (d-t, 0, c, d) + b;
		}

		/**
		 * Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out: decelerating from zero velocity.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeOutBounce (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if ((t/=d) < (1/2.75)) {
				return c*(7.5625*t*t) + b;
			} else if (t < (2/2.75)) {
				return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
			} else if (t < (2.5/2.75)) {
				return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
			} else {
				return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
			}
		}

		/**
		 * Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in/out: acceleration until halfway, then deceleration.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeInOutBounce (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if (t < d/2) return easeInBounce (t*2, 0, c, d) * .5 + b;
			else return easeOutBounce (t*2-d, 0, c, d) * .5 + c*.5 + b;
		}

		/**
		 * Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out/in: deceleration until halfway, then acceleration.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeOutInBounce (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if (t < d/2) return easeOutBounce (t*2, b, c/2, d, p_params);
			return easeInBounce((t*2)-d, b+c/2, c/2, d, p_params);
		}
	}

}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.kuma-de.com/blog/2010-07-10/2213/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[AS3]イージングと時間設定をつける &lt; 俺俺TweenエンジンOreOreTweenを作ってみよう2</title>
		<link>http://www.kuma-de.com/blog/2010-07-02/2199</link>
		<comments>http://www.kuma-de.com/blog/2010-07-02/2199#comments</comments>
		<pubDate>Fri, 02 Jul 2010 04:46:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[1-ActionScript3]]></category>
		<category><![CDATA[1-blog]]></category>
		<category><![CDATA[1-プログラミング]]></category>
		<category><![CDATA[OreOreTween]]></category>

		<guid isPermaLink="false">http://www.kuma-de.com/?p=2199</guid>
		<description><![CDATA[とうきょうとしんは、ぱられるぱられるぱられるぱられるワ～ルド♪
きんくまです。相対性理論、最近まで全然知らなかったんですけど、結構ゆるい感じがいいですね。
さて、俺俺Tweenです。
今回つくったもの。なんかTweenエ [...]]]></description>
			<content:encoded><![CDATA[<p>とうきょうとしんは、ぱられるぱられるぱられるぱられるワ～ルド♪<br />
きんくまです。相対性理論、最近まで全然知らなかったんですけど、結構ゆるい感じがいいですね。</p>
<p>さて、俺俺Tweenです。<br />
今回つくったもの。なんかTweenエンジンっぽくなってきました。<br />
時間設定（duration）とイージング設定（easing）をつけてみました。</p>
<p><script type="text/javascript">
//<![CDATA[
swfobject.embedSWF("/wp/wp-content/uploads/2010/07/Tween2.swf", "tween2", "450", "450", "10.0.0");
//]]&gt;
</script></p>
<div class="border_area" style="width: 450px; height:450px">
<div id="tween2"></div>
</div>
<h3>イージングってなによ</h3>
<p><a href="/blog/2010-07-01/2186">前回</a>つくったものは、始点と終点を等分割して、各地点を計算しました。<br />
今回は点をかたよらせることによって、最初ゆっくり、あとで速くみたいに動きに変化をつけてみましょう。</p>
<p><img src="http://www.kuma-de.com/wp/wp-content/uploads/2010/07/tween2_fig1.jpg" alt="tween2_fig1" title="tween2_fig1" width="347" height="264" class="alignnone size-full wp-image-2206" /></p>
<p>さて、始点と終点から、どうやってかたよった点を取得するかですが、<br />
ロバート　パナーさんのイージングの式を利用させていただきます。</p>
<p><a href="http://robertpenner.com/easing/" target="_blank">>> Robert Penner&#8217;s Easing Equations</a></p>
<p>この式はTweenerをはじめとした各種Tweenライブラリでも使用されています。<br />
例えばeaseInQuadという式であれば、</p>
<pre class="brush:as3">
		/**
		 * Easing equation function for a quadratic (t^2) easing in: accelerating from zero velocity.
		 *
		 * @param t		Current time (in frames or seconds). 　値を取得したい時間（イージングを開始してからの時間）
		 * @param b		Starting value.　開始時点の値
		 * @param c		Change needed in value.　変化値（開始が10で終了が100なら90）
		 * @param d		Expected easing duration (in frames or seconds).　イージング時間
		 * @return		The correct value.
		 */
		public static function easeInQuad (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return c*(t/=d)*t + b;
		}
</pre>
<p>こんな感じの式であらわすことができます。<br />
このとき、引数b,c,dは１回のTweenでは固定なので、時間tを変化させて、そのときの値を取得していきます。<br />
そうすると、偏った各地点のイージング値を取得することができます。<br />
あとは、それを決まったタイミングで（EnterframeかTimerで）表示オブジェクトに適用してあげればいいです。</p>
<h3>時間指定</h3>
<p>Tween時間を変更できるようにしましょう。<br />
今回のTweenエンジンはTimerベースではなく、Enterframeベースのものとします。<br />
全部の分割数はフレームレート30のとき、</p>
<p>var segmentNum:int = Math.floor(frameRate * duration); </p>
<p>であらわすことができます。<br />
これとさきほどのイージングの式を使えば、今回のデモが完成します。</p>
<p>今回のソースです。</p>
<p>■Main</p>
<pre class="brush:as3">
package
{
	import com.bit101.components.HSlider;
	import com.bit101.components.Label;
	import com.bit101.components.List;
	import com.bit101.components.PushButton;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;

	/**
	 * ...
	 * @author KinkumaDesign
	 */
	[SWF(width="450",height="450",backgroundColor="0x000000",frameRate="30")]
	public class Main extends Sprite
	{
		public var ball:Circle;
		public var startBtn:PushButton;
		public var easingList:List;
		public var durationSlider:HSlider;

		public const START_POS:Point = new Point(50, 150);//開始地点
		public const END_POS:Point = new Point(400, 150);//終了地点

		public var tweenValues:Array;
		public var tweenCount:int;

		public function Main():void
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}

		private function init(e:Event = null):void
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);

			ball = new Circle(20, 0x1ECAE8);
			addChild(ball);
			ball.setPosition(START_POS.x, START_POS.y);

			startBtn = new PushButton(this, 250, 380, "start", startBtnClickHD);

			var label:Label = new Label(this, 100, 280, "EASING");
			label.textField.textColor = 0xffffff;
			var easingListItem:Array = ["easeNone", "easeInQuad", "easeOutQuad", "easeInOutQuad"];
			easingList = new List(this, 100, 300, easingListItem);
			easingList.selectedIndex = 1;

			label = new Label(this, 250, 280, "DULATION");
			label.textField.textColor = 0xffffff;

			durationSlider = new HSlider(this, 250, 300, null);
			durationSlider.maximum = 2.0;
			durationSlider.minimum = 0.1;
			durationSlider.tick = 0.1;
			durationSlider.value = 1.1;
		}

		private function startBtnClickHD(e:MouseEvent):void
		{
			var duration:Number = durationSlider.value;
			var easing:String = String(easingList.selectedItem);

			tweenValues = OreOreTween.getTweenValues(END_POS.x, START_POS.x, duration, easing);
			trace(tweenValues); //各地点

			//tweenスタート
			startBtn.visible = false;
			tweenCount = 0;
			addEventListener(Event.ENTER_FRAME, updateTween);
		}

		private function updateTween(e:Event):void
		{

			//tween終了
			if (tweenCount == tweenValues.length)
			{
				removeEventListener(Event.ENTER_FRAME, updateTween);
				startBtn.visible = true;
			//tween値を適用
			}else {
				var value:Number = tweenValues[tweenCount];
				ball.x = value;
				tweenCount++;
			}
		}

	}

}
</pre>
<p>■OreOreTween</p>
<pre class="brush:as3">
package
{
	/**
	 * ...
	 * @author KinkumaDesign
	 */
	public class OreOreTween
	{
		public static const EASE_NONE:String = "easeNone";
		public static const EASE_IN_QUAD:String = "easeInQuad";
		public static const EASE_OUT_QUAD:String = "easeOutQuad";
		public static const EASE_IN_OUT_QUAD:String = "easeInOutQuad";

		public static function getTweenValues(to:Number, from:Number, duration:Number = 1.0, easing:String = EASE_NONE):Array
		{
			var frameRate:int = 30;//フレームレート

			var values:Array = [];
			var segmentNum:int = Math.floor(frameRate * duration); //分割数

			var i:int;
			var t:Number;
			var dt:Number = 1 / segmentNum;
			var time:Number;
			var value:Number;
			for (i = 0; i <= segmentNum; i++) {
				t = dt * i; //tは0以上1以下の範囲で動く
				time = t * duration; //開始からの時刻（秒）

				//easingによる分岐
				switch(easing) {
					case EASE_NONE:
						value = OreOreTweenEquations.easeNone(time, from, to - from, duration);
					break;
					case EASE_IN_QUAD:
						value = OreOreTweenEquations.easeInQuad(time, from, to - from, duration);
					break;
					case EASE_OUT_QUAD:
						value = OreOreTweenEquations.easeOutQuad(time, from, to - from, duration);
					break;
					case EASE_IN_OUT_QUAD:
						value = OreOreTweenEquations.easeInOutQuad(time, from, to - from, duration);
					break;
				}
				values.push(value);
			}
			return values;
		}

	}
}
</pre>
<p>■OreOreTweenEquations<br />
今回はTweenerからソースをもってきているので、Tweenerのライセンスもつけています。</p>
<pre class="brush:as3">
/*
Licensed under the MIT License

Copyright (c) 2006-2008 Zeh Fernando, Nate Chatellier, Arthur Debert and Francis
Turmel

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

http://code.google.com/p/tweener/
http://code.google.com/p/tweener/wiki/License

-------------------------------------------------------------------------------------

Disclaimer for Robert Penner's Easing Equations license:

TERMS OF USE - EASING EQUATIONS

Open source under the BSD License.

Copyright © 2001 Robert Penner
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
    * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

package
{
	/**
	 * ...
	 * @author KinkumaDesign
	 */
	public class OreOreTweenEquations
	{

	// ==================================================================================================================================
	// TWEENING EQUATIONS functions -----------------------------------------------------------------------------------------------------
	// (the original equations are Robert Penner's work as mentioned on the disclaimer)
	// (the original code is from Tweener)

		/**
		 * Easing equation function for a simple linear tweening, with no easing.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeNone (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return c*t/d + b;
		}

		/**
		 * Easing equation function for a quadratic (t^2) easing in: accelerating from zero velocity.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeInQuad (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return c*(t/=d)*t + b;
		}

		/**
		 * Easing equation function for a quadratic (t^2) easing out: decelerating to zero velocity.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeOutQuad (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			return -c *(t/=d)*(t-2) + b;
		}

		/**
		 * Easing equation function for a quadratic (t^2) easing in/out: acceleration until halfway, then deceleration.
		 *
		 * @param t		Current time (in frames or seconds).
		 * @param b		Starting value.
		 * @param c		Change needed in value.
		 * @param d		Expected easing duration (in frames or seconds).
		 * @return		The correct value.
		 */
		public static function easeInOutQuad (t:Number, b:Number, c:Number, d:Number, p_params:Object = null):Number {
			if ((t/=d/2) < 1) return c/2*t*t + b;
			return -c/2 * ((--t)*(t-2) - 1) + b;
		}
	}

}
</pre>
<p>■Circle</p>
<pre class="brush:as3">
package
{
	import flash.display.Graphics;
	import flash.display.Sprite;
	import flash.geom.Point;
	/**
	 * ...
	 * @author KinkumaDesign
	 */
	public class Circle extends Sprite
	{

		public function Circle(radius:Number = 5, color:int = 0, alpha:Number = 1)
		{
			var g:Graphics = this.graphics;
			g.beginFill(color, alpha);
			g.drawCircle(0, 0, radius);
			g.endFill();
		}

		public function setPosition(posX:Number, posY:Number):void
		{
			x = posX;
			y = posY;
		}
	}

}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.kuma-de.com/blog/2010-07-02/2199/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[AS3]俺俺TweenエンジンOreOreTweenを作ってみよう1</title>
		<link>http://www.kuma-de.com/blog/2010-07-01/2186</link>
		<comments>http://www.kuma-de.com/blog/2010-07-01/2186#comments</comments>
		<pubDate>Thu, 01 Jul 2010 04:47:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[1-ActionScript3]]></category>
		<category><![CDATA[1-blog]]></category>
		<category><![CDATA[1-プログラミング]]></category>
		<category><![CDATA[OreOreTween]]></category>

		<guid isPermaLink="false">http://www.kuma-de.com/?p=2186</guid>
		<description><![CDATA[こんにちは。きんくまです。
ご報告なのですが、先月のこのサイトのページビューがついに93000[ページ/月]になりました！
一度もはてブにホットエントリすることもなく、地味な記事ばかりなのですが、
9万越えを達成したのも [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは。きんくまです。</p>
<p>ご報告なのですが、先月のこのサイトのページビューがついに93000[ページ/月]になりました！<br />
一度もはてブにホットエントリすることもなく、地味な記事ばかりなのですが、<br />
9万越えを達成したのも、ひとえに皆様のおかげです。ありがとうございます！<br />
次の目標は大台の10万ページビューです。がんばります。</p>
<p>近況です。<br />
この間からようやく本腰いれてObjective-CというかiPhone/iPadアプリ開発もやりはじめまして。<br />
なんとかいろいろとわかってきました。<br />
役立ち情報などをもう少しためてから、ブログに書いていきたいと思います。</p>
<p>さて、本題です。今回から何度かにわたって俺俺Tweenエンジンを作っていきたいと思います。<br />
ちまたにはTweenerやBetweenAS3、Tweensy、kTweenなどすばらしいTweenエンジンが<br />
あるんですが、そこまで及ばなくても100コぐらいのTweenなら大丈夫！ぐらいのゆるいエンジンを<br />
作りたいと思います。</p>
<p>今回つくったもの</p>
<p><script type="text/javascript">
//<![CDATA[
swfobject.embedSWF("/wp/wp-content/uploads/2010/07/Tween.swf", "tween1", "450", "450", "10.0.0");
//]]&gt;
</script></p>
<div class="border_area" style="width: 450px; height:450px">
<div id="tween1"></div>
</div>
<h3>Tweenエンジンって結局何</h3>
<p>時間のあるかたはとりあえず、城戸さんの講義がわかりやすいと思います。</p>
<p><a href="http://event.67.org/?p=2139#report" target="_blank">GEEKs in OSAKA<br />
Flash モーションプログラミング + 大阪てら子</a></p>
<p>自分の理解としては、「Tweenエンジンは、始点と終点の値を分割したもの」だと思いました。</p>
<p>例えば、始点0、終点100の値をTweenするとします。<br />
分割数を10としたとき、0,10,20,30,40,50,60,70,80,90,100となり、<br />
分割数が5であれば、0,20,40,60,80,100となります。</p>
<p>それで、これらの分割した値を使って、タイマーやEnterframeの中でSpriteやMovieClipに<br />
都度適用していくことで、パラパラアニメのように動いているように見える。というわけです。</p>
<p>城戸さんの講義ではパラメータtを使って、分割していました。<br />
tは0 <= t <= 1 の範囲で動くパラメータです。</p>
<p>dtという値を考えます。<br />
dtは分割数に応じて変化する値で、分割数が10なら 1 / 10 = 0.1、分割数が5なら 1 / 5 = 0.2となります。</p>
<p>さきほどの0から100までをtを使って分割すると<br />
iを0から分割数までの変数として、tに応じた値valueはこんな感じになります。</p>
<p>t = dt * i;<br />
value = (100 - 0) * t + 0;</p>
<p>valueの最後に0をたしているのは初期値が例えば20のときには</p>
<p>value = (100 - 20) * t + 20;</p>
<p>となるためです。<br />
そんで、一番上に作ったデモの場合にあてはめると（実際のコードでは分割数を30にしてますが、図のために5にしてます）<br />
こんな感じになります。</p>
<p><img src="http://www.kuma-de.com/wp/wp-content/uploads/2010/07/tween1_fig1.jpg" alt="tween1_fig1" title="tween1_fig1" width="364" height="79" class="alignnone size-full wp-image-2192" /></p>
<p>今回のコード</p>
<p>■Main</p>
<pre class="brush:as3">
package
{
	import com.bit101.components.PushButton;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;

	/**
	 * ...
	 * @author KinkumaDesign
	 */
	[SWF(width="450",height="450",backgroundColor="0x000000",frameRate="30")]
	public class Main extends Sprite
	{
		public var ball:Circle;
		public var startBtn:PushButton;

		public const START_POS:Point = new Point(50, 150);//開始地点
		public const END_POS:Point = new Point(400, 150);//終了地点

		public var tweenValues:Array;
		public var tweenCount:int;

		public function Main():void
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}

		private function init(e:Event = null):void
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);

			ball = new Circle(20, 0x1ECAE8);
			addChild(ball);
			ball.setPosition(START_POS.x, START_POS.y);

			startBtn = new PushButton(this, 180, 330, "start", startBtnClickHD);
		}

		private function startBtnClickHD(e:MouseEvent):void
		{
			tweenValues = OreOreTween.getTweenValues(END_POS.x, START_POS.x);
			trace(tweenValues); //各地点

			//tweenスタート
			startBtn.visible = false;
			tweenCount = 0;
			addEventListener(Event.ENTER_FRAME, updateTween);
		}

		private function updateTween(e:Event):void
		{
			//tween終了
			if (tweenCount == tweenValues.length)
			{
				removeEventListener(Event.ENTER_FRAME, updateTween);
				startBtn.visible = true;
			//tween値を適用
			}else {
				var value:Number = tweenValues[tweenCount];
				ball.x = value;
				tweenCount++;
			}
		}

	}

}
</pre>
<p>■OreOreTween</p>
<pre class="brush:as3">
package
{
	import flash.geom.Point;
	/**
	 * ...
	 * @author KinkumaDesign
	 */
	public class OreOreTween
	{
		public static function getTweenValues(to:Number, from:Number):Array
		{
			var values:Array = [];

			var segmentNum:Number = 30; //分割数
			var i:int;
			var t:Number;
			var dt:Number = 1 / segmentNum; //分割数
			var value:Number;
			for (i = 0; i <= segmentNum; i++) {
				t = dt * i; //tは0以上1以下の範囲で動く
				value = (to - from) * t + from;
				values.push(value);
			}
			return values;
		}
	}
}
</pre>
<p>■Circle</p>
<pre class="brush:as3">
package
{
	import flash.display.Graphics;
	import flash.display.Sprite;
	import flash.geom.Point;
	/**
	 * ...
	 * @author KinkumaDesign
	 */
	public class Circle extends Sprite
	{

		public function Circle(radius:Number = 5, color:int = 0, alpha:Number = 1)
		{
			var g:Graphics = this.graphics;
			g.beginFill(color, alpha);
			g.drawCircle(0, 0, radius);
			g.endFill();
		}

		public function setPosition(posX:Number, posY:Number):void
		{
			x = posX;
			y = posY;
		}
	}

}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.kuma-de.com/blog/2010-07-01/2186/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
