<?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>blog.alumican.net &#187; Flash</title>
	<atom:link href="http://blog.alumican.net/tag/flash/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.alumican.net</link>
	<description>日々の記憶と記録とActionScript とその周辺</description>
	<lastBuildDate>Thu, 19 Jan 2012 05:51:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>遺伝的アルゴリズムで歩行動作獲得への道　～１歩目～</title>
		<link>http://blog.alumican.net/2009/10/29_003222</link>
		<comments>http://blog.alumican.net/2009/10/29_003222#comments</comments>
		<pubDate>Wed, 28 Oct 2009 15:32:22 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[GA]]></category>
		<category><![CDATA[QuickBox2D]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1531</guid>
		<description><![CDATA[
僕の大好きな、「マッチ箱の脳」という本があります。
人工知能についてとってもおもしろく解説してあるこの本を書いたのは、「がんばれ森川君2号」や「アストロノーカ」などの人工知能が組み込まれたゲームを作ったすごい人です。
 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://lab.alumican.net/earthwalker/earthwalker/01.html"><img class="alignnone size-full wp-image-1532" title="Earthwalker" src="http://blog.alumican.net/wp-content/uploads/2009/10/earthwalker01.jpg" alt="Earthwalker" width="478" height="200" /></a></p>
<p>僕の大好きな、「マッチ箱の脳」という本があります。<br />
人工知能についてとってもおもしろく解説してあるこの本を書いたのは、「がんばれ森川君2号」や「アストロノーカ」などの人工知能が組み込まれたゲームを作ったすごい人です。</p>
<p>» <a href="http://www.amazon.co.jp/gp/product/4883170802?ie=UTF8&amp;tag=alumicannet-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4883170802">マッチ箱の脳(AI)―使える人工知能のお話</a></p>
<p>僕はアストロノーカしかやったこと無いのですが、人工知能が自然にゲームに組み込まれていてすごいなあと当時思ってました。中ではすっごい難しいことをやっているのに。その影響か、僕も人工知能を組みたいと思ってこれまで何度もチャレンジしては挫折してきましたが、懲りずにまたチャレンジすることにしました。</p>
<p>てなわけで、シャクトリムシに歩き方を学習させようと思います。昔は全部自分で作ろうとして失敗したけど、今は高速なAS3や物理エンジンライブラリもあるし、やってみよーGOGO！というわけで今はこんな感じ。</p>
<p>» <a href="http://lab.alumican.net/earthwalker/01.html">Earthwalker Prototype01</a></p>
<p>ちなみに、<strong>まだ人工知能を組み込んでいないので、どれだけ待ってもうまく歩けません</strong>。クリックでカメラを切り替えるなどという、見た目な機能ばかり付けています。さいさき不安です。<br />
<span id="more-1531"></span></p>
<p>まず、シャクトリムシの歩行について考えてみます。人工知能を組むときは、何を学習させるのかが一番大事なので、ここを見極めます。</p>
<p>いくつかの棒状のパーツが繋がった体をシャクトリムシと見立てます。体の繋ぎ目である関節を適当に動かすと、シャクトリムシがウニョウニョ動きます。でもこれだけだと、ただ暴れているだけで全然前へ進みません。前へ歩かせるためには、全ての関節が連携しながら動く必要があります。じゃあ、どのタイミングで、どのくらいの速さで、どれくらいの力で動かせば、もっとも前へ進めるのか。人が手動で調整しても良いのですが、関節の数が増えたら大変だし、途中で重力の大きさとか、少しでも変えるとまた最初から調整というのはちょっと。。。</p>
<p>なので、その辺をシャクトリムシ自身に学習してもらいます。問題を簡単にするために、0.5秒ごとに各関節の速度が決められた数値に切り替わるようにして、それを8回繰り返します。その8回の切り替わりをまとめて、1回の歩行動作のサイクルとします。関節は5個あるので、一体のシャクトリムシの歩行方法を決定するために、8×5=40のパラメータを必要とします。とりあえず、当面はこの40個のパラメータを学習していきます。そのうち形状の進化もさせたいので、そしたらまた別のパラメータにしなければならないのですが。</p>
<p>学習方法は、分かりやすくて学習過程が楽しい<span style="color: #ff0000;">遺伝的アルゴリズム</span>（Genetic Algorithm、以下GA）を使っていくことにします。</p>
<p>さてここからは、GAをちょっとでも分かってもらえればということで、GAの概要を書いておきます。うろ覚えな上に下手にドラマチックにしようとしたので、正確ではないと思いますが、興味のある方は何かの足しになるかも知れません。多分本当はもっとドラマチックなんです、きっと。それに、僕もこれ以上のことは分からずにやっているので大丈夫なはずです（何が）。本気で勉強したい人には<a href="http://www.obitko.com/tutorials/genetic-algorithms/japanese/index.php">このサイト</a>がおすすめです。</p>
<p><strong>準備編</strong><br />
適当な数のシャクトリムシを作ります。<br />
このとき、シャクトリムシの関節の動き方（どんなタイミングで、どんな速度で、どんな力で動かすのか）をランダムに決定し、パラメータとして持たせておきます。このパラメータを生物のそれぞれの個性になぞらえてシャクトリムシの<span style="color: #ff0000;">染色体</span>と呼びます。同じ染色体を持ったシャクトリムシは、全く同じ動きをするわけです。で、色んな個性をもったシャクトリムシをひとまとめにして<span style="color: #ff0000;">世代</span>と呼ぶことにします。</p>
<p><strong>激闘編</strong><br />
世代ができたところで、次はどいつが一番優秀なシャクトリムシなのかを見極めます。何をもって優秀なのかは色々意見がありますが、とりあえず全員を歩かせてみて、一定時間内に一番遠くまで歩いたシャクトリムシを優勝とします。歩かせた後は成績順にソートでもしておきましょう。</p>
<p><strong>愛憎編　～淘汰～</strong><br />
競争すれば優秀なやつも出てくるし、落ちこぼれも出てきます。手を繋いでみんなで一等賞なんてこの世界には存在しません。しょせんこの世は弱肉強食、弱いシャクトリムシは生存競争に負けて死んでしまいます。この弱肉強食の世界をGAでは<span style="color: #ff0000;">淘汰（選択）</span>という処理でおこないます。</p>
<p>GAとは、何百世代も世代交代しながら、だんだんと優秀なシャクトリムシを作っていくという仕組みです。弱いシャクトリムシは次の世代に自分の子孫を残せず、捨てられます。どのシャクトリムシを、どれくらいの数だけ淘汰させるのかを決める方法もたくさんあって、単純にランキング最下位から選んだり、確率的に選んだり色々です。</p>
<p><strong>愛憎編　～交叉～</strong><br />
生存競争に敗れるシャクトリ虫もいれば、生き残るシャクトリ虫もいます。そして、次世代に向けてシャクトリ虫をさらに進化させるべく、生き残ったシャクトリ虫の優秀な染色体をかけあわせて、もっと優秀な染色体をつくりだす処理を<span style="color: #ff0000;">交叉</span>といいます。</p>
<p>生き残ったシャクトリ虫の中から、何らかの方法（ランキングの上位からだったり、ランダムだったり色々あります）で2匹の親を選びます。選ばれた親は交配し、2匹の子供を作ります。この子供は、生き残った親の染色体から生まれるので、そこそこ優秀なシャクトリ虫だと予想されます。たまに親の良くない部分を引き継いだ子供も生まれますが。交叉の方法もそれこそたくさんあって、親の遺伝子をある1点で入れ替える一点交叉だったり、二点交叉だったり、解きたい問題によって良い方法は違ってきます。結構バクチなのがアレですが、これでひとまず次世代に希望をもたせることができました。</p>
<p>そうそう、淘汰しすぎた場合はランダムな染色体を持った新入りを追加したり交配したり、増えすぎた場合は多めに淘汰させるなどして、今の世代と次世代とでシャクトリ虫の総数が同じになるようにするのを忘れずに。いつの間にか絶滅しちゃったりとか寂しいから。</p>
<p><strong>愛憎編　～突然変異～</strong><br />
次世代の卵もそろい、愛憎編もそろそろ終幕です。が、最後にちょっと味付けします。というのも、淘汰と交叉だけを繰り返していくと秀才はだんだんと多くなっていくのですが、壁をぶち破る天才は生まれにくいのです。このままだと、やがてそこそこ優秀な染色体にみんな同化し、進化が止まってしまいます。</p>
<p>そこで、染色体のどこか一部分を、極めて低い確率で全く別の値に書き換えてしまいます。これを<span style="color: #ff0000;">突然変異</span>と呼びます。突然変異のおかげで進化が停滞せずに、常にチャレンジャーな世代を生み出すことができます。突然変異をさせすぎると、副作用としてせっかくこれまで培ってきた優秀な染色体の情報が壊されてしまうので注意です。</p>
<p><strong>歴史はちょっとだけ進んで繰り返す</strong><br />
そして、次世代はまた激闘編へと進み、だんだんとシャクトリムシは歩行動作を獲得していくのでした。</p>
<p><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.jp/e/ir?t=alumicannet-22&amp;l=as2&amp;o=9&amp;a=4883170802" border="0" alt="" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/10/29_003222/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QuickBox2D 1.0 正式版リリース</title>
		<link>http://blog.alumican.net/2009/09/30_194751</link>
		<comments>http://blog.alumican.net/2009/09/30_194751#comments</comments>
		<pubDate>Wed, 30 Sep 2009 10:47:51 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[QuickBox2D]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1354</guid>
		<description><![CDATA[今までアルファ版だったのに、いつの間にかQuickBox2D 1.0がリリースされていました。QuickBox2DっていうのはActionSnippetのZevan氏が作ってる、Box2DFlashAS3を簡単に扱えるよ [...]]]></description>
			<content:encoded><![CDATA[<p>今までアルファ版だったのに、いつの間にか<a href="http://actionsnippet.com/?page_id=1391">QuickBox2D 1.0</a>がリリースされていました。QuickBox2Dっていうのは<a href="http://actionsnippet.com/">ActionSnippet</a>のZevan氏が作ってる、Box2DFlashAS3を簡単に扱えるようにするライブラリです。このブログでも<a href="http://blog.alumican.net/tag/quickbox2d">何度か</a>紹介させていただいてます。超オススメ。</p>
<p>なので久々にQuickBox2Dネタを書こうとActionSnippetを見てみると、僕の知らないサンプルが30個以上。凄い、どれを紹介しようか迷う。というか機能が増えすぎてよくわからん、やばい！というわけで何日かに分けてこのエントリに、サンプルがどんなことをやっているのか、どこの部分がキモなのかだけ勉強がてら書いてみます。間違っていればどうぞ突っ込みお願いします。<br />
<span id="more-1354"></span></p>
<p>QuickBox2Dのメソッドは引数にObject型を渡すことが多いです（Tweenerみたいに）。このObjectでメソッド特有の色々パラメータを指定します。例えば多角形を作成するaddPolyなど、剛体を作り出すaddXXX系のメソッドではx座標やy座標や角度などを標準で指定できます。今回このようなパラメータについて記述するとき、これらの標準プロパティについては省略して、addPolyならaddPolyでしか指定できない引数だけを記述していきます。addXXX系のメソッドで指定できる標準パラメータに関しては<a href="http://actionsnippet.com/?p=1261">こちらのエントリ</a>の下の方にまとまっていますので参照してください。</p>
<p>コード中に出てくるsimはQuickBox2Dのインスタンスを表しています。</p>
<pre><code> var sim:QuickBox2D = new QuickBox2D(this, {オプション});</code></pre>
<p>　<br />
<strong>追記 09.10.04</strong><br />
とりあえずタイトルだけ書いた、先に。<br />
　</p>
<p><strong>32. setGroupIndexによる衝突判定有無の切り替え</strong> &#8211; <a href="http://actionsnippet.com/?p=2268">QuickBox2D Mini-Machine</a><br />
執筆中</p>
<p><strong>31. テクスチャをジョイントに適用する</strong> &#8211; <a href="http://actionsnippet.com/?p=2239">QuickBox2D Joint Skinning</a><br />
執筆中</p>
<p><strong>30. テクスチャサイズの自動調整</strong> &#8211; <a href="http://actionsnippet.com/?p=2224">QuickBox2D Skinning Examples</a><br />
執筆中</p>
<p><strong>29. 指定したgroupIndex同士の衝突を検出する</strong> &#8211; <a href="http://actionsnippet.com/?p=2218">QuickBox2D Contact Filtering</a><br />
執筆中</p>
<p><strong>28. FlashPlayer10の3D表現</strong> &#8211; <a href="http://actionsnippet.com/?p=2209">QuickBox2D 3D</a><br />
執筆中</p>
<p><strong>27. QuickBox2Dによる衝突判定3</strong> &#8211; <a href="http://actionsnippet.com/?p=2201">QuickBox2D Contacts Part 3</a><br />
執筆中</p>
<p><strong>26. QuickBox2D 1.0の特長</strong> &#8211; <a href="http://actionsnippet.com/?p=2187">QuickBox2D 1.0 Features</a><br />
執筆中</p>
<p><strong>25. QuickBox2Dによる衝突判定2</strong> &#8211; <a href="http://actionsnippet.com/?p=2192">QuickBox2D Contacts Part 2</a><br />
執筆中</p>
<p><strong>24. QuickBox2Dによる衝突判定1</strong> &#8211; <a href="http://actionsnippet.com/?p=2179">QuickBox2D Contacts Part 1</a><br />
執筆中</p>
<p><strong>23. QuickBox2D 1.0リリース</strong> &#8211; <a href="http://actionsnippet.com/?p=2175">QuickBox2D 1.0</a><br />
執筆中</p>
<p><strong>22. 指定時間後に関数を呼び出す</strong> &#8211; <a href="http://actionsnippet.com/?p=2148">QuickBox2D addTimeStepSequence() Preview</a></p>
<pre><code>sim.addTimeStepSequence(
  { time:時間, callback:呼び出す関数, args:[呼び出し時の引数配列] },
  { time:時間, callback:呼び出す関数, args:[呼び出し時の引数配列] },
  { time:時間, callback:呼び出す関数, args:[呼び出し時の引数配列] },
  ...
  { time:時間, callback:呼び出す関数, args:[呼び出し時の引数配列] }
);</code></pre>
<p>addTimeStepSequenceにあらかじめ登録しておくことで、指定した時間ステップが経過すると指定し関数を指定した引数と共に呼び出すことができる。呼び出しのタイミングはFRIM(フレームレートに依存しない)ので、オブジェクトの状態とずれることがない。デモではオブジェクトの動きやタイミングに合わせての視点移動やズームをおこなっている。addTimeStepSequenceには一度にいくらでも登録可能。timeに指定する数値の計算方法を後で確認する。</p>
<p><strong>21. ピタゴラスイッチ的なサンプル</strong> &#8211; <a href="http://actionsnippet.com/?p=2142">QuickBox2D Vaguely Goldberg-esque</a><br />
シーソー機構や、反発係数(restitution)を1以上にすることで打ち返す機構をつかったピタゴラスイッチのようなサンプル。おもしろい。</p>
<p><strong>20. createメソッドによるオブジェクトの生成</strong> &#8211; <a href="http://actionsnippet.com/?p=2123">QuickBox2D create() Method</a></p>
<pre><code>sim.create(生成するオブジェクトの種類, {オプション});</code></pre>
<p>これまでaddCircle、addBox、addPolyなどメソッドそのものを使い分けることで様々なオブジェクトを生成したが、実はcreateメソッドだけで任意のオブジェクトを生成できる。第1引数に&#8221;circle&#8221;、&#8221;box&#8221;、&#8221;poly&#8221;などオブジェクトの種類を文字列で指定すればOK。第2引数はオブジェクトの生成パラメータ。</p>
<p><strong>19. 衝突判定の有無をを動的に切り替える</strong> &#8211; <a href="http://actionsnippet.com/?p=2114">QuickBox2D groupIndex Platforms</a></p>
<pre><code>var object:QuickObject = ...
var filter:b2FilterData = object.shape.GetFilterData();
filter.groupIndex = 1;
object.shape.SetFilterData(filter);</code></pre>
<p>Box2DFlashAS3の衝突判定フィルタであるb2FilterDataのgroupIndexを動的に書き換えることで、上方向からの衝突判定だけを持っているオブジェクトを生成するサンプル。<br />
また、sim.w.GetContactCount() メソッドにより現在衝突が起こっているオブジェクトの数を知ることができる。</p>
<p><strong>18. 人体と一輪車の連動サンプル</strong> &#8211; <a href="http://actionsnippet.com/?p=2014">QuickBox2D Unicycler</a><br />
一輪車でバランスを取りながら前後に移動する人間を模したデモ。一見リアルな動きに、バランスと取るための凄いアルゴリズムが組まれていそうに感じるが、実は転けないように毎フレーム上体の角度をコントロールしている。<br />
バランスを取っているように見せるために腕の動きをフリーにしていること、上体を三角関数で揺らしていること、車輪と足の繋ぎの見せ方が秀逸。上体と車輪の接続部分にどうもテクニックを使ってるっぽいので後で調べないと。あと、QuickBox2DのコンストラクタパラメータとしてrenderJointsを指定するとジョイントを表示するかどうか切り替えられる。</p>
<p><strong>17. 足の動きを作るサンプル</strong> &#8211; <a href="http://actionsnippet.com/?p=2010">QuickBox2D Floating Walker</a><br />
原始的な二足歩行ロボットのスケッチらしい。ジョイントを使って足の動きを作ってる。ジョイント生成用のconnect関数が便利そう。あと、QuickBox2DのコンストラクタパラメータにgravityX、gravityYを指定すれば重力を簡単に設定できる。</p>
<p><strong>16. プリズムジョイント（PrismaticJoint）を作る</strong> &#8211; <a href="http://actionsnippet.com/?p=2004">QuickBox2D Prismatic Joint</a></p>
<pre><code>var object:QuickObject = sim.addJoint({
  type:"prismatic",
  a:オブジェクトAのbody,
  b:オブジェクトBのbody,
  anchor:オブジェクトAとジョイントの接続点(b2Vec2),
  axis:ジョイントの駆動方向を表すベクトル(b2Vec2)
});</code></pre>
<p>DistanceJoint以外のジョイントを作ろう第四弾はプリズムジョイント。このジョイントはピストンの動きを実現する。anchorを軸として、axisの方向に向かってピストン運動をするっぽいな。<br />
ピストンの移動幅はupperTranslationやlowerTranslationで制御できる。こういう、サンプルで使われてないけど指定できるパラメータに関しても後で追記しときます。<br />
あまり関係ないけどオブジェクトのbody.GetWorldCenter()でそのオブジェクトのグローバル座標をb2Vecインスタンスで取得できるのか、なるほど。<br />
QuickBox2Dクラスによく使いそうな文字列は定数化されてるのを発見したのでメモ。</p>
<pre><code>QuickBox2D.STEP      // "step"
QuickBox2D.DISTANCE  // "distance"
QuickBox2D.REVOLUTE  // "revolute"
QuickBox2D.PRISMATIC // "prismatic"
QuickBox2D.GEAR      // "gear"
QuickBox2D.PULLEY    // "pulley"</code></pre>
<p>これでジョイントの指定にスペルミスが減る、よかった。</p>
<p><strong>15. ギアジョイント（GearJoint）を作る</strong> &#8211; <a href="http://actionsnippet.com/?p=1989">QuickBox2D Gear Joint</a></p>
<pre><code>var object:QuickObject = sim.addJoint({
  type:"gear",
  a:接続するオブジェクトAのbody,
  b:接続するオブジェクトBのbody,
  joint1:影響するジョイント1,
  joint2:影響するジョイント2
});</code></pre>
<p>DistanceJoint以外のジョイントを作ろう第三弾はギアジョイント。このジョイントは2つのジョイントの動きの大きさの和を保存するように働く。<br />
デモでは、joint1としてプリズムジョイント（次のサンプルで解説）、joint2として回転ジョイントを指定してる。このとき、joint1の伸びとjoint2の回転角の和はいつも等しくなる。また、joint1とjoint2の接続オブジェクトaはどちらも空間（sim.w.GetGroundBody()）である必要がある。これは使ってみて慣れるしかない。難しいねー。</p>
<p><strong>14. ジョイントを空間中の1点と接続する</strong> &#8211; <a href="http://actionsnippet.com/?p=2001">QuickBox2D Connect to GroundBody</a></p>
<pre><code>var object:QuickObject = sim.addJoint({
  type:"revolute",
  a:接続するオブジェクトのbody,
  b:sim.w.GetGroundBody()
});</code></pre>
<p>QuickObjectインスタンスのwプロパティ（b2World）のGetGroundBodyメソッドで取得したb2bodyを、ジョイントの片方の接続オブジェクトとして設定すると、空間にジョイントを接続することができる。上手くいえないけど空中に固定する感じ。</p>
<p><strong>13. 回転ジョイントに角速度を加える</strong> &#8211; <a href="http://actionsnippet.com/?p=1986">QuickBox2D Revolute Walker</a></p>
<pre><code>var joint:b2RevoluteJoint = revJointA.joint as b2RevoluteJoint
joint.SetMotorSpeed(1.0);</code></pre>
<p>3つのオブジェクトを回転ジョイントで接続し、角速度を与えることでモーターの役割をさせるデモ。QuickObjectからb2RevoluteJointを取り出し、Box2DFlashAS3のSetMotorSpeedメソッドを呼び出して回転させている。</p>
<p><strong>12. 滑車ジョイント（PulleyJoint）を作る</strong> &#8211; <a href="http://actionsnippet.com/?p=1983">QuickBox2D Pulley Joint</a></p>
<pre><code>var object:QuickObject = sim.addJoint({
  type:"pulley",
  a:接続するオブジェクトAのbody,
  b:接続するオブジェクトBのbody,
  groundAnchor1:オブジェクトA側の固定接続点(b2Vec2),
  groundAnchor2:オブジェクトB側の固定接続点(b2Vec2)
});</code></pre>
<p>DistanceJoint以外のジョイントを作ろう第二弾は滑車ジョイント。固定接続点は2次元ベクトル(b2Vec2)で渡すこと。そうするとオブジェクトA-groundAnchor1-groundAnchor2-オブジェクトBという関係で結ばれる。</p>
<p><strong>11. 回転ジョイント（RevoluteJoint）を作る</strong> &#8211; <a href="http://actionsnippet.com/?p=1975">QuickBox2D Revolute Ragdoll</a></p>
<pre><code>var object:QuickObject = sim.addJoint({
  type:"revolute",
  a:接続するオブジェクトAのbody,
  b:接続するオブジェクトAのbody,
  enableLimit:回転角度を制限する場合はtrue、360度ぐるぐる回す場合はfalse,
  lowerAngle:最小の回転角度,
  upperAngle:最大の回転角度
});</code></pre>
<p>DistanceJoint以外のジョイントを作ろう第一弾は回転ジョイント。enableLimitで回転角度を制限する場合はlowerAngle、upperAngleで回転範囲を指定する（ラジアン角）。</p>
<p><strong>10. リンケージされているテクスチャを貼る</strong> &#8211; <a href="http://actionsnippet.com/?p=1634">QuickBox2D Skinning</a></p>
<pre><code>var object:QuickObject = sim.addXXX({
  skin:リンケージクラス名
});</code></pre>
<p>QuickObjectを生成するときにオブジェクトに貼り付けるテクスチャを指定できる。貼り付けるテクスチャはflaファイルのライブラリにリンケージされている必要がある。Bitmapじゃなくても大丈夫。</p>
<p><strong>9. groupIndexによる衝突判定の制御</strong> &#8211; <a href="http://actionsnippet.com/?p=1630">QuickBox2D groupIndex</a></p>
<pre><code>var object:QuickObject = sim.addXXX({
  groupIndex:衝突グループインデックス（符号付き整数）
});</code></pre>
<p>QuickObjectを生成するときにgroupIndexを整数で指定できる（負の値も可）。同じ正の数でグループ付けされたオブジェクトは必ず衝突し、同じ負の数でグループ付けされたオブジェクトは必ず衝突しない。デモがとても楽しいので是非見るべし！QuickBox2Dにおける衝突判定の制御については『<a href="http://blog.alumican.net/2009/07/05_024440">QuickBox2DやBox2DFlashAS3での衝突判定をグループ分け</a>』参照。</p>
<p><strong>8. 外部XMLにASを記述して動的に実行する</strong> &#8211; <a href="http://actionsnippet.com/?p=1611">XML to ActionScript #3 (AsXML)</a><br />
ちょっとこれはよく読んでないのでわかんない。どうやらASを記述した外部XML（AsXML形式？）をswfに読み込んでスクリプトを実行する様子。デモでは、QuickBox2D、Papervision3D、TweenLiteのスクリプトをAsXMLに記述して連携させている。勉強しとこう。</p>
<p><strong>7. フレームレートに依存しないシミュレーション</strong> &#8211; <a href="http://actionsnippet.com/?p=1538">QuickBox2D FRIM</a></p>
<pre><code>var sim:QuickBox2D = new QuickBox2D(this, {
  frim:FRIMを使用する場合はtrue、そうでない場合はfalse
});</code></pre>
<p>QuickBox2D初期化時に、frimプロパティをtrueにするとFRIM(frame rate independent motion)モードとなる。通常フレームレートが低いとモーションは遅く、逆にフレームレートが高いと速くなる。FRIMモードではフレームレートに関わらない時間ベースでのシミュレーションが可能となる。そのかわり、フレームレートが低いとそれだけ粗いモーションとなることに注意。とっても便利な機能。</p>
<p><strong>6. オブジェクトに速度を加える</strong> &#8211; <a href="http://actionsnippet.com/?p=1543">QuickBox2D w/ Key Controls</a></p>
<pre><code>var object:QuickObject = ...
var vec2:b2Vec2 = object.body.GetLinearVelocity();
var scalar:Number = object.body.GetAngularVelocity();
object.body.SetLinearVelocity(vec2);
object.body.SetAngularVelocity(scalar);</code></pre>
<p>キー操作によってオブジェクトに力を加えるデモ。GetLinearVelocityで現在の速度、GetAngularVelocityで現在の角速度をそれぞれ取得できる。また、SetLinearVelocityとSetAngularVelocityで速度、角速度を設定できる。この辺はQuickBox2Dから、直接Box2DFlashAS3のメソッドを呼び出している感じ。</p>
<p><strong>5. addGroupによるテトリスのブロック生成</strong> &#8211; <a href="http://actionsnippet.com/?p=1505">QuickBox2D Tetris Pieces</a><br />
addBoxで生成したたくさんの正方形をaddGroupで結合し、テトリスのブロックを形作るデモ。</p>
<p><strong>4. addGroupによるオブジェクトのグループ化</strong> &#8211; <a href="http://actionsnippet.com/?p=1479">QuickBox2D Groups</a></p>
<pre><code>var object:QuickObject = sim.addGroup({
  objects:[オブジェクトA, オブジェクトB, オブジェクトC, ... , オブジェクトZ]
});</code></pre>
<p>objects配列で渡したオブジェクトをひとまとめにしたQuickObjectを生成する。frequencyHzとdampingRatioを適度に設定したバネっぽいジョイントの動きにも注目。</p>
<p><strong>3. addPolyによる多角形の生成（凹面も可能）</strong> &#8211; <a href="http://actionsnippet.com/?p=1471">QuickBox2D Polys</a></p>
<pre><code>var object:QuickObject = sim.addPoly({
  points:[x1, y1, x2, y2, x3, y3, ... , xn, yn],
  wireframe:全ポリゴンのワイヤーフレームを表示する場合はtrue、輪郭のみを表示する場合はfalse
});</code></pre>
<p>addPolyによる複雑なポリゴン生成のデモ。頂点を格納する順番はどうすればいいのか要確認。</p>
<p><strong>2. addJointによるジョイントの生成</strong> &#8211; <a href="http://actionsnippet.com/?p=1261">QuickBox2D Chain</a></p>
<pre><code>var object:QuickObject = sim.addJoint({
  a:接続するオブジェクトAのbody,
  b:接続するオブジェクトBのbody,
  x1:Aとジョイントの接続点のx座標,
  y1:Aとジョイントの接続点のy座標,
  x2:Bとジョイントの接続点のx座標,
  y2:Bとジョイントの接続点のy座標,
  length:ジョイントの長さ,
  frequencyHz:ジョイントの伸びやすさ,
  dampingRatio:ジョイントの元の長さへの戻りやすさ,
  collideConnected:AとBの間に衝突判定を持たせる場合はtrue、そうでない場合はfalse
});</code></pre>
<p>addJointでオブジェクトAとオブジェクトBをつなぐジョイントを生成できる。このサンプルが投稿されたときはまだDistanceJointしか実装されていなかった。それ以外の、ギアや滑車などのジョイント生成のサンプルは後述。<br />
x1,y1,x2,y2はオブジェクトAやオブジェクトBのローカル座標系でなく、QuickBox2Dのグローバル座標系で指定することに注意。省略するとそれぞれのオブジェクトの基準点が接続点となる。<br />
lengthプロパティはジョイントの長さ。デフォルトではジョイント生成時のオブジェクト同士の距離となるが、別の値を指定する場合は設定する。<br />
frequencyHzはジョイントの柔らかさ。0に近い数値ほどよく伸びるジョイントになり、大きな数値ほど固いジョイントとなる。また、0で完全に剛体となる。<br />
dampingRatioは弾性。0に近い数値ほど伸びた状態から元の長さに戻る力が強まり、大きな数値ほど元の長さへ戻ろうとしなくなる。frequencyHzとdampingRatioでバネのようなジョイントを実現できる。</p>
<p><strong>1. x、y、angleプロパティによるオブジェクトの移動と回転</strong> &#8211; <a href="http://actionsnippet.com/?p=1431">QuickBox2D Play</a></p>
<pre><code>var object:QuickObject = ...
object.x = 10;
object.x = 5;
object.angle = 1;
</code></pre>
<p>addBoxやaddCircleなどで作成できるQuickObjectはx,y,angleプロパティの変更で簡単に移動や回転が可能。『<a href="http://blog.alumican.net/2009/07/06_014321">QuickBox2D オブジェクトの平行移動と回転</a>』参照。<br />
　</p>
<p><strong>他のQuickBox2Dネタ一覧もどうぞ</strong> » <a href="http://blog.alumican.net/tag/quickbox2d">tag : QuickBox2D</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/09/30_194751/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WP-Al-SWFObjectアップデート　v2.1</title>
		<link>http://blog.alumican.net/2009/06/30_151045</link>
		<comments>http://blog.alumican.net/2009/06/30_151045#comments</comments>
		<pubDate>Tue, 30 Jun 2009 06:10:45 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=961</guid>
		<description><![CDATA[久しぶりにWP-Al-SWFObjectをアップデートしました。
v2.0からv2.1へのマイナーアップデートになります。
最新版のダウンロードはこちらです。
変更点は以下の通りです。

wp_al_swfobject_ [...]]]></description>
			<content:encoded><![CDATA[<p>久しぶりにWP-Al-SWFObjectをアップデートしました。<br />
v2.0からv2.1へのマイナーアップデートになります。</p>
<p>最新版のダウンロードは<a href="/2009/04/19_233117#wp_al_swobject_download">こちら</a>です。<br />
変更点は以下の通りです。</p>
<ul>
<li>wp_al_swfobject_echo関数により、エントリー以外でもswfを貼り付けられるようになりました。詳しくは<a href="/2009/04/19_233117#wp_al_swobject_usage_anywhere">こちら</a>。</li>
<li>最新版のSWFObject2.2に入れ替えました。</li>
</ul>
<p>エントリー以外へのswf貼り付けについて、以前<a href="http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1126274376">Yahoo!知恵袋で間違った回答をしてしまいました</a>ので、訂正してお詫びします。</p>
<p><span style="color: #ff0000;">エントリー以外への貼り付けはWP-Al-SWFObjectが今まで対応していなかっただけで、WP-SWFObjectは対応しています（wp_swfobject_echo関数）。</span>僕が知らなかっただけでした。。。</p>
<p>質問者のarupa2008さん、WP-SWFObjectの中の人であるJim Penaloza Calixtoさん、知恵袋を見てくださった方、誤解を与えてしまってごめんなさいごめんなさい；；</p>
<p>今後はこのようなことが無いよう気をつけます OTL&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/06/30_151045/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RGB Ensemble using Webcam</title>
		<link>http://blog.alumican.net/2009/06/06_144431</link>
		<comments>http://blog.alumican.net/2009/06/06_144431#comments</comments>
		<pubDate>Sat, 06 Jun 2009 05:44:31 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[wonderfl]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=834</guid>
		<description><![CDATA[
先月の大阪てら子でSaqooshaさんがつくってたのが素敵だったので、見よう見まねでやってみました。ただやるだけだとつまんないので、RGBのカラーバージョンでアンサンブルしてみました（音の動的生成を使っているのでFla [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align:center;width:100%;margin-bottom:15px;"><iframe title="RGB Ensemble using Webcam - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/d14b" width="465" height="490" style="border:0px black solid;"></iframe></div>
<p><a href="http://atnd.org/events/664">先月の大阪てら子</a>で<a href="http://saqoosha.net/">Saqoosha</a>さんがつくってたのが素敵だったので、見よう見まねでやってみました。ただやるだけだとつまんないので、RGBのカラーバージョンでアンサンブルしてみました（音の動的生成を使っているので<a href="http://get.adobe.com/jp/flashplayer/">FlashPlayer10</a>以上じゃないと動きません）。</p>
<p>webカメラ（カメラがない人はサンプルの静止画像）からリアルタイムで読み込んだ画像をRGB分解します。分解されたRGB画像をもとに音を鳴らすおもちゃです。RGBの順にオクターブ単位で音域が低くなっているので、頑張れば3パートでハモれるかも知れません。</p>
<p>いい感じの音を鳴らすために<br />
<a href="http://wonderfl.kayac.com/code/1cafdfd8a0f008107c8e42c33043107a73cb52e8"> あの楽器っぽいスクリプト Ver1.2(メニューをつけてみた）</a><br />
の波形生成アルゴリズムを使わせてもらってます。ありがとうございます。</p>
<p>また、単純にBitmapData.copyChannelやColorMatrixFilterなどでRGB分解すると、例えば白い部分などは全チャネルで反応してしまいます。そこで、人の目が見て赤緑青な部分を直感的にRGB成分として取り出せるように、RGBExtractorというクラスを作りました。</p>
<p>このクラスは入力画像の全ピクセルに以下の処理をおこなうことでRGB各成分を抽出します。ここで、R,G,Bはある座標における入力画像の色、R&#8217;,G&#8217;,B&#8217;は分解後のその座標の色となります(計算上マイナスになった場合は0とします)。<br />
scaleは0以上の任意の実数です。写真などの自然画像にはRGBの純色はまず出てこないので、scaleがある程度高くないとハッキリと検出できませんでした。</p>
<pre><code>R' = scale * ( R - max(G, B) )
G' = scale * ( G - max(B, R) )
B' = scale * ( B - max(R, G) )</code></pre>
<p>この処理は、実際にはフィルタで全ピクセルをバッチ処理しています。RGBExtractorクラスはまだ詰めが甘いので、もう少し精度を上げられるように頑張ってSpark Projectにコミットしておきます。</p>
<p>今回初めてFlashPlayer10の動的音生成を使ってみたのですが、鳴らすだけなら思ってたより簡単でした。それ以上に、音の鳴るものは作っててやっぱり面白くて、音楽ってすごいなあって改めて感じました。幸いにもSpark Projectには<a href="http://www.libspark.org/#sound-as3">音関係の素晴らしいライブラリ</a>がたくさんあるので、もっと使わせていただこうと思います。そんな感じです。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/06/06_144431/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ActionScript3.0製のスクロールバー JPPScrollbar 公開</title>
		<link>http://blog.alumican.net/2009/05/28_040338</link>
		<comments>http://blog.alumican.net/2009/05/28_040338#comments</comments>
		<pubDate>Wed, 27 May 2009 19:03:38 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[JPPScrollbar]]></category>
		<category><![CDATA[library]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=796</guid>
		<description><![CDATA[簡単に使えるActionScript3.0製のスクロールバー「JPPScrollbar」をSpark Projectでリリースしました。はい、名前はエアロスミスのJust Push Playにあやかっています、すいません [...]]]></description>
			<content:encoded><![CDATA[<p>簡単に使えるActionScript3.0製のスクロールバー「JPPScrollbar」をSpark Projectでリリースしました。はい、名前はエアロスミスのJust Push Playにあやかっています、すいません。以下説明。</p>
<p><strong><a href="http://www.libspark.org/wiki/alumican/JPPScrollbar">JPPScrollbar</a></strong></p>
<p>Just（ただ） Put（置けば） Play（動く） Scrollbar（スクロールバー）<br />
サンプルファイルのライブラリからステージに置けば動いてくれるActionScript3.0製のスクロールバーです。個人的に作っていましたが、割と高機能になったので公開します。</p>
<p><strong>主な機能</strong></p>
<ul>
<li>任意のSpriteやMovieClipをスクロールバーのパーツとしてバインド可能です</li>
<li>滑らかな減速スクロールを使用可能です</li>
<li>コンテンツ量に合わせて縮むスクロールバーを使用可能です</li>
<li>スライダーの高さを0ピクセルとして扱うことが可能です</li>
<li>iPhoneのような、スクロールが行き過ぎて戻る演出が使用可能です</li>
<li>エンドロールのような自動スクロールを実行可能です</li>
<li>外部からメソッド呼び出しでスクロールさせることが可能です</li>
<li>スクロール量など、こと細かく決められます</li>
<li>スライダーやスクロール対象コンテンツを整数値に吸着できます</li>
<li>y座標でなくても、任意のプロパティをスクロール可能です</li>
<li>ライブラリからコピペしなくてもnewして使えます</li>
<li><a href="http://www.libspark.org/wiki/SWFWheel">SWFWheel</a>を使用しているので大抵の環境でマウスホイールを使えます</li>
</ul>
<p>などなど色々ありますが、とりあえず目的にかなったサンプルのフォルダからごそっとコピペすれば動くようになっています。もう少し詳しい使い方は<a href="http://www.libspark.org/wiki/alumican/JPPScrollbar">Spark Project</a>のほうに書いてあります。</p>
<p><strong>サンプル</strong></p>
<ul>
<li><a href="http://www.libspark.org/svn/as3/JPPScrollbar/trunk/samples/01/sample01.swf" rel="shadowbox;width=400;height=360;options={flashBgColor:'#ffffff'};">samples/01</a> ･･･ コンテンツ量に合わせて伸縮するスライダーを使用した減速スクロールバー（デフォルト）</li>
<li><a href="http://www.libspark.org/svn/as3/JPPScrollbar/trunk/samples/02/sample02.swf" rel="shadowbox;width=400;height=360;options={flashBgColor:'#ffffff'};">samples/02</a> ･･･ 減速スクロールを使わないスクロールバー</li>
<li><a href="http://www.libspark.org/svn/as3/JPPScrollbar/trunk/samples/03/sample03.swf" rel="shadowbox;width=426;height=765;options={flashBgColor:'#ffffff'};">samples/03</a> ･･･ iPhoneっぽいスクロールとイベントの使用例 （<a href="http://log.sncr.jp/">matsumos</a>さんに作成していただきました）</li>
<li><a href="http://www.libspark.org/svn/as3/JPPScrollbar/trunk/samples/04/sample04.swf" rel="shadowbox">samples/04</a> ･･･ リキッドレイアウトに対応したスクロールバー</li>
<li><a href="http://www.libspark.org/svn/as3/JPPScrollbar/trunk/samples/05/sample05.swf" rel="shadowbox;width=400;height=360;options={flashBgColor:'#ffffff'};">samples/05</a> ･･･ useIgnoreSliderHeight  = true （スライダーの高さを0として扱う）の使いどころ → スライダーの基準点をスクロールエリアの上から下までめいっぱい動かしたいとき</li>
<li><a href="http://www.libspark.org/svn/as3/JPPScrollbar/trunk/samples/06/sample06.swf" rel="shadowbox;width=400;height=360;options={flashBgColor:'#ffffff'};">samples/06</a> ･･･ 水平スクロールバーのサンプル</li>
<li><a href="http://www.libspark.org/svn/as3/JPPScrollbar/trunk/samples/07/bin/sample07.swf" rel="shadowbox;width=360;height=240;options={flashBgColor:'#ffffff'};">samples/07</a> ･･･ ASファイルだけで作ったサンプル （<a href="http://log.sncr.jp/">matsumos</a>さんに作成していただきました） </li>
<li><a href="http://www.libspark.org/svn/as3/JPPScrollbar/trunk/samples/08/bin/sample08.swf" rel="shadowbox;width=800;height=600;options={flashBgColor:'#ffffff'};">samples/08</a> ･･･ Papervision3Dのテクスチャに組み込んだサンプル （<a href="http://log.sncr.jp/">matsumos</a>さんに作成していただきました） </li>
<li><a href="http://www.libspark.org/svn/as3/JPPScrollbar/trunk/samples/09/bin/sample09.swf" rel="shadowbox;width=800;height=600;options={flashBgColor:'#ffffff'};">samples/09</a> ･･･ 外部テキストを読み込んでスクロールする（読み込みに失敗する場合はSVNからダウンロードしてお試しください）</li>
<li>サンプルどしどし受付中です！</li>
</ul>
<p>つーわけでこのJPPScrollbar、ガンガン使ってもらえると嬉しいです。<br />
めんどくさい部分はちゃちゃっと済ませちゃいましょー。</p>
<p><strong>追記 10.05.12　バージョン1.03への移行について</strong><br />
バージョン1.03へのアップデートに伴い、これまでの使い方ではエラーが出るようになりました。詳しくは<a href="http://www.libspark.org/wiki/alumican/JPPScrollbar#log1.03">SparkProject</a>に追記していますのでそちらをご覧ください。バージョン1.02もダウンロード可能です。</p>
<p><strong>追記 10.07.04　バージョン1.04をリリースしました</strong><br />
MagicMouse使用時の不具合に対処しました。詳しくは<a href="http://www.libspark.org/wiki/alumican/JPPScrollbar#log1.04">SparkProject</a>に追記しています。</p>
<p><strong>追記 10.08.02　バージョン1.05 Previewをリリースしました</strong><br />
詳しくは<a href="http://www.libspark.org/wiki/alumican/JPPScrollbar#log1.05pre">SparkProject</a>に追記しています。</p>
<p><strong>追記 10.09.17　バージョン1.06Preview, 1.06をリリースしました</strong><br />
詳しくは<a href="http://www.libspark.org/wiki/alumican/JPPScrollbar#log1.06">SparkProject</a>に追記しています。</p>
<p><strong>追記 11.10.14　バージョン1.07をリリースしました</strong><br />
詳しくは<a href="http://www.libspark.org/wiki/alumican/JPPScrollbar#log1.07">SparkProject</a>に追記しています。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/05/28_040338/feed</wfw:commentRss>
		<slash:comments>111</slash:comments>
		</item>
		<item>
		<title>Plug-in &#8220;WP-Al-SWFObject&#8221; embeds Flash on WordPress</title>
		<link>http://blog.alumican.net/2009/05/18_005204</link>
		<comments>http://blog.alumican.net/2009/05/18_005204#comments</comments>
		<pubDate>Sun, 17 May 2009 15:52:04 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=765</guid>
		<description><![CDATA[This entry is English version of the Japanese one. I&#8217;m sorry I&#8217;m not good at English. If you find any mistakes, please let me know.
WP-Al-SWFObject
I made the plug-in to embed on the entry of WordPress easily, so it introduces it. This is powerful plug-in for embedding swf on WordPress. It is possible to specify parameters  [...]]]></description>
			<content:encoded><![CDATA[<p>This entry is English version of <a href="http://blog.alumican.net/2009/04/19_233117">the Japanese one</a>. I&#8217;m sorry I&#8217;m not good at English. If you find any mistakes, please let me know.</p>
<p><strong>WP-Al-SWFObject</strong><br />
I made the plug-in to embed on the entry of WordPress easily, so it introduces it. This is powerful plug-in for embedding swf on WordPress. It is possible to specify parameters more in detail than WP-SWFObject.</p>
<p><a href="/2009/05/18_005204#wp_al_swobject_download">Download</a><br />
<a href="/2009/05/18_005204#wp_al_swobject_usage">How to use</a><br />
<a href="/2009/05/18_005204#wp_al_swobject_usage_anywhere">・How to use (In a location other than the entry)</a><br />
<a href="/2009/05/18_005204#wp_al_swobject_control">Control panel</a><br />
<a href="/2009/05/18_005204#wp_al_swobject_example">Examples</a><br />
<a href="/2009/05/18_005204#wp_al_swobject_swfobjectversion">Version of SWFObject used</a><br />
<a href="/2009/05/18_005204#wp_al_swobject_license">License</a></p>
<p><strong id="wp_al_swobject_download">- Download</strong><br />
&gt;&gt;<a href="http://www.libspark.org/svn/wordpress/WP-Al-SWFObject/tags/v2.1/wp-al-swfobject_2.1_en.zip">Download (Enblish)</a><br />
&gt;&gt;<a href="http://www.libspark.org/svn/wordpress/WP-Al-SWFObject/tags/v2.1/wp-al-swfobject_2.1_ja.zip">Download (Japanese)</a></p>
<p><strong id="wp_al_swobject_usage">- How to use</strong></p>
<ol>
<li>The wp-al-swfobject folder is created by defrosting downloaded zip, and you up-load the folder to the wp-content/plugins directory of the server.</li>
<li>The WP-Al-SWFObject plug-in is made effective from set screen -&gt; plug-in of WordPress.</li>
<li>Describe the following codes at the position in which you want to embed swf. Please replace [ /embedSWF] with [/embedSWF].</li>
</ol>
<pre><code>[embedSWF]<span style="color: #ff0000;">swf</span>, width, height, align, version, expressInstall, flashvars, params, attributes[ /embedSWF]</code></pre>
<p><span style="color: #ff0000;">The parameter of the deficit</span> is indispensable, and other parameters is optional (It is possible to omit it).</p>
<ul>
<li><span style="color: #ff0000;">swf（indispensable） ･･･ The path to embedded swf</span></li>
<li>width（optional） ･･･ The width of swf.  If you omit it, the default value specified on a control panel is used.</li>
<li>height（optional） ･･･ The height of swf. If you omit it, the default value specified on a control panel is used.</li>
<li>align（optional） ･･･ The position of swf. You can choose from the &#8220;left&#8221;, the &#8220;right&#8221;, or the &#8220;center&#8221;.<br />
If you omit it, the value isn&#8217;t specified especially.</li>
<li>version（optional） ･･･ The version of necessary FlashPlayer. It becomes 9.0.0 when omitting it.</li>
<li>expressInstall（optional） ･･･ The path to express-install-swf. It is displayed when the player doesn&#8217;t meet the requirement. SWFObject default &#8220;expressInstall.swf&#8221; is displayed when omitting it.</li>
<li>flashvars（optional） ･･･ The flashvars a.k.a the variable that html passes swf. It is described by the format <em>{name1:&#8221;value1&#8243;, name2,&#8221;value2&#8243;}</em>.</li>
<li>params（optional） ･･･ The parameters when swf is embedded is described by flashvars and the same format.</li>
<li>attributes（optional） ･･･ The attributes on html when swf is embedded is described by flashvars and the same format.</li>
</ul>
<p><span id="more-765"></span></p>
<p><strong id="wp_al_swobject_usage_anywhere">・How to use (In a location other than the entry)</strong><br />
If you want to paste swf to the outside of the entry (For example, header and sidebar), you can call the following php function in where you want to paste swf.</p>
<pre><code>&lt;?php wp_al_swfobject_echo('[embedSWF]swf, width, height, align, version, expressInstall, flashvars, params, attributes[／embedSWF]'); ?&gt;</code></pre>
<p><strong id="wp_al_swobject_control">- Control panel</strong><br />
The default value of each parameter can be set from the plug-in Control panel.<br />
The default value is applied to all swf embedded by WP-Al-SWFObject.<br />
The priority level when the same variable is set in two or more parts becomes the following.</p>
<p>Settings in [embedSWF] tag &gt; <em>{name1:&#8221;value1&#8243;, name2:&#8221;value2&#8243;}</em> at Control panel &gt; Supplementary setting in control panel(only params can be set).</p>
<p>It is overwrited by the variable with a high priority level. Moreover, for flashvars and params and attributes, the superscription is judged individually in each variable.</p>
<p>For instance, when the following code is set from Control panel, </p>
<pre><code>aaa:"30", bbb:"50"</code></pre>
<p>flashvars (<em>aaa=&#8221;50&#8243;, bbb</em>=&#8221;30&#8243;) is passed to all embedded swf by using WP-Al-SWFObject. Under such a condition, as follows is done and swf is embedded.</p>
<pre><code>[embedSWF]hoge.swf,,,,,,{aaa:"10"}[ /embedSWF]</code></pre>
<p>In this case, because variable <em>aaa</em> is alse specified with flashvars in [embedSWF] tag, the default value is not applied to variable <em>aaa</em>. In a word, this swf will receive flashvars as <em>aaa=&#8221;10&#8243;, bbb=&#8221;50&#8243;</em>.</p>
<p><strong id="wp_al_swobject_example">- Example</strong><br />
It embeds without specifying the option (Be set it to 300 in width and 50 in height on the Control panel).</p>
<pre><code>[embedSWF]hoge.swf[ /embedSWF]</code></pre>
<p><div style="text-align: center; width:300px; height:50px; line-height:50px; background: #ffffff;"><div id="swfc8e06">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfc8e06", "300", "50", "9.0.0", "http://blog.alumican.net/wp-content/plugins/wp-al-swfobject/expressInstall.swf", {}, {}, {});
</script>
<br />
　</p>
<p>Next, width and height are embedded specifying it.</p>
<pre><code>[embedSWF]hoge.swf, 200, 100[ /embedSWF]</code></pre>
<p><div style="text-align: center; width:200px; height:100px; line-height:100px; background: #ffffff;"><div id="swfc8e07">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfc8e07", "200", "100", "9.0.0", "http://blog.alumican.net/wp-content/plugins/wp-al-swfobject/expressInstall.swf", {}, {}, {});
</script>
<br />
　</p>
<p>Next, it makes to right adjust, and flashvars is passed.</p>
<pre><code>[embedSWF]hoge.swf, 200, 100, right,,,{aaa:"10"}[ /embedSWF]</code></pre>
<p><div style="text-align: center; width:200px; height:100px; line-height:100px; margin-left: auto; background: #ffffff;"><div id="swfc8e08">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfc8e08", "200", "100", "9.0.0", "http://blog.alumican.net/wp-content/plugins/wp-al-swfobject/expressInstall.swf", {aaa:"10"}, {}, {});
</script>
<br />
　</p>
<p>Next, the <em>id</em> and the <em>name</em> attribute of html are added.</p>
<pre><code>[embedSWF]hoge.swf, 200, 100,,,,{},{},{id:"sample", name:"sample"}[ /embedSWF]</code></pre>
<p><div style="text-align: center; width:200px; height:100px; line-height:100px; background: #ffffff;"><div id="swfc8e09">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfc8e09", "200", "100", "9.0.0", "http://blog.alumican.net/wp-content/plugins/wp-al-swfobject/expressInstall.swf", {}, {}, {id:"sample",name:"sample"});
</script>
<br />
　</p>
<p>Next, all parameters are specified (Flashplayer 9.0.0 or later is required. When the player version is low, <em>http://hogehoge.jp/alt.swf</em> is displayed. The variable named <em>aaa=10</em> is passed to swf. The context menu is not given. The connection between html and swf is always permitted. The id and the name attribute of html is sample).</p>
<pre><code>[embedSWF]hoge.swf, 400, 360, center, 9.0.0, http://hogehoge.jp/alt.swf, {aaa:"10"}, {menu:"false", allowScriptAccess:"always"}, {id:"sample", name:"sample"}[ /embedSWF]</code></pre>
<p><div style="text-align: center; width:200px; height:100px; line-height:100px; margin: auto; margin-right: auto; background: #ffffff;"><div id="swfc8e010">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfc8e010", "200", "100", "9.0.0", "http://hogehoge.jp/alt.swf", {aaa:"10"}, {menu:"false",allowScriptAccess:"always"}, {id:"sample",name:"sample"});
</script>
<br />
　</p>
<p><strong id="wp_al_swobject_swfobjectversion">- Version of SWFObject used</strong><br />
You can switch the version of SWFObject on COntrol panel (It is 2.1 in default).<br />
It corresponds to version from 1.5 to 2.2. But, <a href="http://code.google.com/p/swfobject/wiki/whats_new">Callback method</a> that is the new features included of 2.2, and the attributes of 1.5 cannot be specified at current version.</p>
<p><strong id="wp_al_swobject_license">- license</strong><br />
<a href="http://sourceforge.jp/projects/opensource/wiki/licenses%2FGNU_General_Public_License">GPL license</a>. Because WP-SWFObject that is origin of WP-SWFObject is GPL license. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/05/18_005204/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fluid on the Video</title>
		<link>http://blog.alumican.net/2009/05/12_202244</link>
		<comments>http://blog.alumican.net/2009/05/12_202244#comments</comments>
		<pubDate>Tue, 12 May 2009 11:22:44 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Fluid]]></category>
		<category><![CDATA[wonderfl]]></category>
		<category><![CDATA[流体シミュレーション]]></category>
		<category><![CDATA[物理]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=713</guid>
		<description><![CDATA[
前回のエントリに書いたyugop氏の言葉にもろ影響されてますが、美しいものを作りたくなったので、やったった。ActionScript3.0で流体シミュレーション。ついでにサイトトップも更新しました。 
実はまともにDi [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align:center;width:100%;margin-bottom:15px;"><iframe title="Fluid on the Video - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/wM1h" width="465" height="490" style="border:0px black solid;"></iframe></div>
<p><a href="http://blog.alumican.net/2009/05/12_134205">前回のエントリ</a>に書いたyugop氏の言葉にもろ影響されてますが、美しいものを作りたくなったので、やったった。ActionScript3.0で流体シミュレーション。ついでにサイトトップも更新しました。 </p>
<p>実はまともにDisplacementMapFilterを使ったのは初めてでした、うへぁ。流体シミュレーションも初めてだったので色々戸惑ったけど、まあまあおもろいもんが作れた気がするぞ。</p>
<p>どうやってるかというと、基本的なアルゴリズムは<a href="http://violentcoding.com/blog/2008/07/26/archives/135">blog ViolentCoding</a>さんのを使っていて、それを動画に適用した感じです。で、そのまんまだとマウスを素早く動かすとゼリーみたいにぷるぷるしちゃったので（可愛いけど）、ドロっとするようにアルゴリズムを改造。あとは高速化のためにセルを2次元配列で走査するのではなく、リンクリストを使うように変更しました。他にも色々やった気がするけど、忘れた。</p>
<p>リンクリストってのは、隣のセルを参照として持っておいて、その参照を使って隣へアクセスする方法。配列演算子を使わずに、隣へ隣へとセルの参照をたどることで、まるっとアクセスします。</p>
<p>今回は各セル毎に、forに代わる次セルへの参照と、流体の速度場を更新するための上下左右8方向のセルの参照を持たせました。これがめっぽう速いのなんのなのです。（フレームレートで言うと5フレームくらい違う）</p>
<p>なので、今度から頻繁に配列を回すときはリンクリストを使うようにするとよさげです。ターゲットプレーヤーが10のときにVectorとどっちが速いのか要検証ですが。</p>
<p>あと、この流体表現。<br />
<span style="color: #ff0000;">ライブラリは必殺技</span>という精神に基づいて、<a href="http://www.trick7.com/blog/2008/07/27-205806.php">trick7さんのTeraFire</a>みたいに</p>
<pre><code>alumiFluid(target);</code></pre>
<p>とかで任意のオブジェクトを液状化できると素敵なので現在制作中だったりします。もちろん、汎用流体ライブラリとしても使えるようにするつもりです。需要あるかどうか分からんけど。</p>
<p>wonderflのはソースにコメントを書いてないので、ライブラリ化のときにちゃんとします。少々お待ちを、すみません。</p>
<p>では～。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/05/12_202244/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPressにFlashを貼り付けるプラグインWP-Al-SWFObject</title>
		<link>http://blog.alumican.net/2009/04/19_233117</link>
		<comments>http://blog.alumican.net/2009/04/19_233117#comments</comments>
		<pubDate>Sun, 19 Apr 2009 14:31:17 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=586</guid>
		<description><![CDATA[English is here.
WP-Al-SWFObject
WordPressのエントリにswfを簡単に貼り付けるためのプラグインを作ったので紹介します。WP-SWFObjectよりも細かくパラメータを指定できます [...]]]></description>
			<content:encoded><![CDATA[<p>English is <a href="http://blog.alumican.net/2009/05/18_005204">here</a>.</p>
<p><strong>WP-Al-SWFObject</strong><br />
WordPressのエントリにswfを簡単に貼り付けるためのプラグインを作ったので紹介します。WP-SWFObjectよりも細かくパラメータを指定できます。</p>
<p><a href="/2009/04/19_233117#wp_al_swobject_download">ダウンロード</a><br />
<a href="/2009/04/19_233117#wp_al_swobject_usage">使い方</a><br />
<a href="/2009/04/19_233117#wp_al_swobject_usage_anywhere">使い方（エントリー以外の場所に貼り付ける）</a><br />
<a href="/2009/04/19_233117#wp_al_swobject_control">管理画面</a><br />
<a href="/2009/04/19_233117#wp_al_swobject_example">使用例</a><br />
<a href="/2009/04/19_233117#wp_al_swobject_swfobjectversion">使用するSWFObjectのバージョン</a><br />
<a href="/2009/04/19_233117#wp_al_swobject_license">ライセンス</a></p>
<p><strong id="wp_al_swobject_download">・ダウンロード</strong><br />
&gt;&gt;<a href="http://www.libspark.org/svn/wordpress/WP-Al-SWFObject/tags/v2.1/wp-al-swfobject_2.1_en.zip">Download （英語版）</a><br />
&gt;&gt;<a href="http://www.libspark.org/svn/wordpress/WP-Al-SWFObject/tags/v2.1/wp-al-swfobject_2.1_ja.zip">Download （日本語版）</a></p>
<p><strong id="wp_al_swobject_usage">・使い方</strong></p>
<ol>
<li>ダウンロードしたzipを解凍するとwp-al-swfobjectフォルダができるので、フォルダごとサーバのwp-content/pluginsディレクトリにアップロードします。</li>
<li>WordPressの設定画面-&gt;プラグインから、WP-Al-SWFObjectプラグインを有効化します。</li>
<li>エントリー内のswfを貼り付けたい位置に以下のコードを記述します。[／embedSWF]は[/embedSWF]に置き換えてください。</li>
</ol>
<pre><code>[embedSWF]<span style="color: #ff0000;">swf</span>, width, height, align, version, expressInstall, flashvars, params, attributes[／embedSWF]</code></pre>
<p>赤字のパラメータは必須、黒字のパラメータはオプション(省略可能)です。</p>
<ul>
<li><span style="color: #ff0000;">swf（必須） ･･･ 貼り付けるswfへのパスを記述します。</span></li>
<li>width（省略可） ･･･ swfの幅を指定します。省略するとプラグインの設定ページで指定したデフォルト値が用いられます。</li>
<li>height（省略可） ･･･ swfの高さを指定します。省略するとプラグインの設定ページで指定したデフォルト値が用いられます。</li>
<li>align（省略可） ･･･ swfを貼り付ける際の位置を指定します。左寄せ、右寄せ、中央寄せに対してそれぞれleft、right、centerで指定します。省略すると特に指定されません。</li>
<li>version（省略可） ･･･ 必要なFlashPlayerのバージョンを記述します。省略すると9.0.0となります。</li>
<li>expressInstall（省略可） ･･･ プレイヤーが要件を満たさない場合に表示するswfへのパスを記述します。省略するとSWFObjectデフォルトのexpressInstall.swfを表示します。</li>
<li>flashvars（省略可） ･･･ HTMLからflashに渡す変数（flashvars）を、{変数名1:&#8221;値1&#8243;, 変数名2:&#8221;値2&#8243;}という形式で記述します。</li>
<li>params（省略可） ･･･ swfを貼り付ける際のパラメータを、flashvarsと同形式で記述します。</li>
<li>attributes（省略可） ･･･ swfを貼り付ける際のhtml属性を、flashvarsと同形式で記述します。</li>
</ul>
<p><span id="more-586"></span></p>
<p><strong id="wp_al_swobject_usage_anywhere">・使い方（エントリー以外の場所に貼り付ける）</strong><br />
ヘッダーやサイドバーなど、エントリ以外の場所に貼り付ける場合は、貼り付けたい場所で以下のphp関数を呼び出します。引数として、エントリー内に貼り付ける場合のタグと同様のものをまるごと文字列で渡します。</p>
<pre><code>&lt;?php wp_al_swfobject_echo('[embedSWF]swf, width, height, align, version, expressInstall, flashvars, params, attributes[／embedSWF]'); ?&gt;</code></pre>
<p><strong id="wp_al_swobject_control">・管理画面</strong><br />
WP-Al-SWFObjectは管理画面から各パラメータのデフォルト値を設定できます。<br />
デフォルト値はWP-Al-SWFObjectによって貼られる全てのswfに適用されます。<br />
同じ変数を複数の箇所で設定した場合の優先順位は<br />
[embedSWF]タグ内 &gt; 設定画面の{変数名1:&#8221;値1&#8243;, 変数名2:&#8221;値2&#8243;} &gt; 設定画面の補助設定（paramsのみ設定可）<br />
となっており、優先順位の高い変数に上書きされます。また、flashvars、params、attributesに関しては各変数ごとに上書き判定がなされます。</p>
<p>例えば、管理画面からflashvarsの項目に</p>
<pre><code>aaa:"30", bbb:"50"</code></pre>
<p>を設定すると、WP-Al-SWFObjectを使って貼る全てのswfに aaa=&#8221;30&#8243;, bbb=&#8221;50&#8243; としてflashvarsが渡されます。この状態で、以下のようにしてswfを貼り付けます。</p>
<pre><code>[embedSWF]hoge.swf,,,,,,{aaa:"10"}[／embedSWF]</code></pre>
<p>この場合、タグ内でデフォルト値と同名の変数名aaaでflashvarsを指定しているため、デフォルト値は変数aaaに対して適用されません。つまり、このswfは aaa=&#8221;10&#8243;, bbb=&#8221;50&#8243; としてflashvarsを受け取ることになります。</p>
<p><strong id="wp_al_swobject_example">・使用例</strong><br />
オプションを指定せずに貼り付ける（管理画面で幅300、高さ50に設定してあります）</p>
<pre><code>[embedSWF]hoge.swf[／embedSWF]</code></pre>
<p><div style="text-align: center; width:300px; height:50px; line-height:50px; background: #ffffff;"><div id="swfc8e016">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfc8e016", "300", "50", "9.0.0", "http://blog.alumican.net/wp-content/plugins/wp-al-swfobject/expressInstall.swf", {}, {}, {});
</script>
</p>
<p>幅と高さを指定して貼り付ける</p>
<pre><code>[embedSWF]hoge.swf, 200, 100[／embedSWF]</code></pre>
<p><div style="text-align: center; width:200px; height:100px; line-height:100px; background: #ffffff;"><div id="swfc8e017">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfc8e017", "200", "100", "9.0.0", "http://blog.alumican.net/wp-content/plugins/wp-al-swfobject/expressInstall.swf", {}, {}, {});
</script>
</p>
<p>右寄せにしてflashvarsを渡す</p>
<pre><code>[embedSWF]hoge.swf, 200, 100, right,,,{aaa:"10"}[／embedSWF]</code></pre>
<p><div style="text-align: center; width:200px; height:100px; line-height:100px; margin-left: auto; background: #ffffff;"><div id="swfc8e018">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfc8e018", "200", "100", "9.0.0", "http://blog.alumican.net/wp-content/plugins/wp-al-swfobject/expressInstall.swf", {aaa:"10"}, {}, {});
</script>
</p>
<p>htmlのidとname属性を付加する</p>
<pre><code>[embedSWF]hoge.swf, 200, 100,,,,{},{},{id:"sample", name:"sample"}[／embedSWF]</code></pre>
<p><div style="text-align: center; width:200px; height:100px; line-height:100px; background: #ffffff;"><div id="swfc8e019">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfc8e019", "200", "100", "9.0.0", "http://blog.alumican.net/wp-content/plugins/wp-al-swfobject/expressInstall.swf", {}, {}, {id:"sample",name:"sample"});
</script>
</p>
<p>全パラメータを指定する（プレイヤーは9.0.0以上、プレイヤーバージョンが低い場合はhttp://hogehoge.jp/alt.swfを表示、aaa=10という変数をswfに渡す、右クリックメニューを出さない、htmlとswfの通信を常に許可する、htmlのidとname属性をsampleとする）</p>
<pre><code>[embedSWF]hoge.swf, 400, 360, center, 9.0.0, http://hogehoge.jp/alt.swf, {aaa:"10"}, {menu:"false", allowScriptAccess:"always"}, {id:"sample", name:"sample"}[／embedSWF]</code></pre>
<p><div style="text-align: center; width:200px; height:100px; line-height:100px; margin: auto; margin-right: auto; background: #ffffff;"><div id="swfc8e020">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://lab.alumican.net/wp-al-swfobject/sample.swf", "swfc8e020", "200", "100", "9.0.0", "http://hogehoge.jp/alt.swf", {aaa:"10"}, {menu:"false",allowScriptAccess:"always"}, {id:"sample",name:"sample"});
</script>
</p>
<p><strong id="wp_al_swobject_swfobjectversion">・使用するSWFObjectのバージョン</strong><br />
管理画面から切り替えられます（デフォルトでは2.1）。<br />
バージョン1.5～2.2まで対応していますが、現在のところ1.5のattributesと2.2の新機能である<a href="http://code.google.com/p/swfobject/wiki/whats_new">Callback method</a>は指定できません。</p>
<p><strong id="wp_al_swobject_license">・ライセンス</strong><br />
元にしたWP-SWFObjectが<a href="http://sourceforge.jp/projects/opensource/wiki/licenses%2FGNU_General_Public_License">GPLライセンス</a>なのでGPLでお願いします。</p>
<p><strong>追記 09.04.24</strong><br />
使用方法が2エントリに分割されていたので、1つにまとめました。<br />
swfの幅と高さが省略可能となりましたので、それに伴いエントリ内容を修正しました。<br />
プラグインの紹介に特化するため、前段部分の文章（下記のもの）を削除しました。</p>
<blockquote><p><a href="http://blog.alumican.net/2009/04/17_134737">前回のエントリ</a>にも書いたのですが、WordPressにswfを貼り付けるには<a href="http://wordpress.org/extend/plugins/wp-swfobject/">WP-SWFObjectプラグイン</a>が便利です。が、どうにもparamsとattributeを指定できないようなので、プラグインを自作しました。（WP-SWFObjectでのflashvarsの渡し方は<a href="http://blog.alumican.net/2009/04/17_134737#comments">コメント欄で</a>まつもとさんに教えていただきました、ありがとうございます！）</p></blockquote>
<p><strong>追記 09.05.11</strong><br />
<a href="http://www.libspark.org/wiki/alumican/WP-Al-SWFObject">SparkProjectにコミット</a>しました。</p>
<p><strong>追記 09.05.18</strong><br />
<a href="http://blog.alumican.net/2009/05/18_005204">英語版エントリ</a>を書きました。</p>
<p><strong>追記 09.06.30</strong><br />
<a href="/2009/06/30_151045">v2.1にバージョンアップしました</a>。wp_al_swfobject_echo関数により、エントリー以外の場所でもswfの貼り付けが可能となりました。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/04/19_233117/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>WP-SWFObjectでwmodeを変更できない問題の解決法</title>
		<link>http://blog.alumican.net/2009/04/17_134737</link>
		<comments>http://blog.alumican.net/2009/04/17_134737#comments</comments>
		<pubDate>Fri, 17 Apr 2009 04:47:37 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=519</guid>
		<description><![CDATA[WordPressでSWFObjectを使ったswfファイルの貼り付けをサポートしてくれるWP-SWFObjectプラグインを導入してみました。バージョンは2.1です。
例えば幅400px、高さ300pxのhoge.sw [...]]]></description>
			<content:encoded><![CDATA[<p>WordPressでSWFObjectを使ったswfファイルの貼り付けをサポートしてくれる<a href="http://wordpress.org/extend/plugins/wp-swfobject/">WP-SWFObjectプラグイン</a>を導入してみました。バージョンは2.1です。</p>
<p>例えば幅400px、高さ300pxのhoge.swfを埋め込みたい場所で</p>
<pre><code>[SWF]hoge.swf, 400, 300[／SWF]</code></pre>
<p>と記述すればSWFObjectタグを挿入してくれるので大変便利です。[／SWF]の部分は[/SWF]に置き換えてください。</p>
<p>オプション画面では、書き出し時のパラメータを調整できて結構融通がきくのですが、wmodeだけはopaqueやtransparentに設定しても、すぐにデフォルトのwindowにもどってしまいます。</p>
<p>何でだろうと思ってwp-swfobjectフォルダのwp-swfobject.phpをみてみると、197行目あたりにタイポを見つけました。</p>
<pre><code>&lt;select name="<span style="color: #ff0000;">swf_mode</span>" id="<span style="color: #ff0000;">swf_mode</span>"&gt;&lt;/select&gt;</code></pre>
<p>swf_wmodeとするはずがswf_modeに。。。どうやらこいつが原因のようです。そこで、この行を以下のように変更します。</p>
<pre><code>&lt;select name="<span style="color: #ff0000;">swf_wmode</span>" id="<span style="color: #ff0000;">swf_wmode</span>"&gt;&lt;/select&gt;</code></pre>
<p>アップしなおすと上手く動きました。ﾊﾟﾁﾊﾟﾁﾊﾟﾁ</p>
<p>あとは、SWFObjectで言うところのflashvars、params、attributesをWP-SWFObjectから上手く渡せれば完璧なのですが、やり方がよく分かりません。どなたか知っている方がおられましたら教えてください↓</p>
<pre><code>swfobject.embedSWF("hoge.swf", "content_id", "400", "300", "9.0.0", "expressInstall.swf", <span style="color: #ff0000;">flashvars</span>, <span style="color: #ff0000;">params</span>, <span style="color: #ff0000;">attributes</span>);</code></pre>
<p><strong>追記 09.05.03</strong><br />
自ら解決すべく、プラグイン『<a href="http://blog.alumican.net/2009/04/19_233117">WP-Al-SWFObject</a>』を自作しました。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/04/17_134737/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>終・Eseclockを改造しました</title>
		<link>http://blog.alumican.net/2009/04/14_152001</link>
		<comments>http://blog.alumican.net/2009/04/14_152001#comments</comments>
		<pubDate>Tue, 14 Apr 2009 06:20:01 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[Eseclock]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[UNIQLOCK]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=445</guid>
		<description><![CDATA[ESEQLOCK アナログ時計バージョン
第1回、第2回と連載してきた、一体誰が得をするのか分からないこのEseclock改造版の解説シリーズも、今回をもって最後とさせていただきます。最後は、
『時計表示（と下のテキスト [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://lab.alumican.net/eseqlock/sample07.html" rel="shadowbox"><img src="http://blog.alumican.net/wp-content/uploads/2009/04/eseclock3.png" alt="Eseclock" title="Eseclock" width="478" height="200" class="alignnone size-full wp-image-368" /></a><a href="http://lab.alumican.net/eseqlock/sample07.html" rel="shadowbox">ESEQLOCK アナログ時計バージョン</a></p>
<p><a href="/2009/04/07_222813">第1回</a>、<a href="/2009/04/10_041347">第2回</a>と連載してきた、一体誰が得をするのか分からないこのEseclock改造版の解説シリーズも、今回をもって最後とさせていただきます。最後は、<br />
<strong>『時計表示（と下のテキスト）を好きなビジュアルにしよう』</strong><br />
です。でもあまり解説することがないです（ぉぃ</p>
<p><span id="more-445"></span></p>
<p><strong>5．時計下のテキスト部分（以下テキスト）を書き換える</strong><br />
これは簡単で、</p>
<pre><code>description = "EBISU / JAPAN"</code></pre>
<p>などとすれば良いです。これでデフォルトの「TOKYU / JAPAN」が「EBISU / JAPAN」となります。恵比寿とした理由は職場が恵比寿だからです。僕の怠慢により、EseclockがaddChildされた後に書き換えないと例外エラーが出るかも知れません。ごめんなさい。<br />
　</p>
<p><strong>6．時計やテキストを好きな形式のTextFieldで表示する</strong><br />
この場合、表示に使用したいTextFieldをもったカスタムクラスを作成する必要があります。</p>
<p>まず、時計やテキストを好きなフォントで表示する場合です。この場合、表示に使用したいテキストフィールドをもったカスタムクラスを作成する必要があります。今回、サンプルではテキストののカスタムクラスをCustomClockFieldクラスとして、Helveticaフォントで表示することにしました。flaファイル内のライブラリに、TextFieldをもったCustomDescriptionFieldというムービークリップがあり、CustomDescriptionFieldクラスに関連づけられています。</p>
<p>そして、CustomDescriptionField.asを見てみると、CustomDescriptionFieldクラスはEseclockDefaultDescriptionTextFieldを継承しているのが分かるかと思います。このEseclockDefaultDescriptionTextFieldクラス（以下デフォルトクラス）は、Eseclockにデフォルトで表示されるテキストを管理するクラスです。</p>
<p>今回のようにデフォルトの表示からの変更点がTextFormatのみの場合、カスタムクラスにデフォルトクラスを継承させるとほとんど何もすることがありません。カスタムクラスのコンストラクタ内で、表示に使用したいTextFieldインスタンスを_fieldプロパティに渡してあげればカスタマイズ完了です。以下、テキスト部分のカスタムクラスです。ソースコードはsample\06に入っています。</p>
<pre><code>package {
    import flash.text.TextField;
    import flash.text.TextFormat;
    import org.libspark.eseclock.textfield.EseclockDefaultDescriptionTextField;

    //時計に使うクラスはEseclockDefaultClockTextFieldを, テキストに使うクラスはEseclockDefaultDescriptionTextFieldをそれぞれ継承させる
    public class CustomDescriptionField extends EseclockDefaultDescriptionTextField {

        //ライブラリのCustomDescriptionFieldシンボルの中に配置してあるTextField
        public var tf:TextField;

        //コンストラクタ
        public function CustomDescriptionField():void {

            //tfというTextFieldインスタンスを表示に使う
            _field = tf;

            //ボールド表示にしてみる
            var fmt:TextFormat = _field.defaultTextFormat;
            fmt.bold = true;
            _field.defaultTextFormat = fmt;
        }
    }
}</code></pre>
<p>&gt;&gt;<a href="http://lab.alumican.net/eseqlock/sample06.html" rel="shadowbox">Sample</a><br />
　</p>
<p><strong>7．時計やテキストを好きなように表示する</strong><br />
デフォルト表示では例えば「01 23 45」のように、時分秒の間に半角スペースを入れることで時間を1つのTextFieldのみで表示しています。しかし今回は字詰めの関係で時分秒を3つのTextFieldに分けることにしました。このカスタマイズは、デフォルトのTextFieldのtextFormatを変更するだけでは対応できません。そこで、時計部分のデフォルトクラス（EseclockDefaultClockTextFieldクラス）を継承させずにカスタムクラスを作ります。継承させてもいいのですが、この場合ほとんどのメソッドをオーバーライドしないといけないので継承させない方がてっとり早いと思います。。。</p>
<p>実際どうやるかというと、ライブラリのCustomClockFieldというムービークリップに3つのTextFieldを入れて、CustomClockFieldクラスに関連づけておきます。ここで大事なのは、CustomClockFieldクラスにIEseclockTextFieldインターフェースを実装させるということです。</p>
<p>IEseclockTextFieldインターフェースは、カスタムクラスがEseclockの時計もしくはテキストとして振る舞うために、最低限必要なメソッドをまとめたインターフェースとなっており、カスタムクラスは以下のメソッドを実装する必要があります。</p>
<p><strong>・objectWidth、objectHeight メソッド</strong><br />
時計またはテキストの幅および高さを取得するためのgetterメソッドです。</p>
<pre><code>function get objectWidth():Number;
function get objectHeight():Number;</code></pre>
<p><strong>・setColor メソッド</strong><br />
表示オブジェクトの色を変更するメソッドです。<br />
表示オブジェクトを、引数で指定された色へと変更するコードを実装することになります。</p>
<pre><code>function setColor(color:uint):void;</code></pre>
<p><strong>・updateClock メソッド</strong><br />
時計を表示するカスタムクラスの場合、毎秒updateClockメソッドが呼び出されます。<br />
引数としてh（時）、m(分)、s(秒)を受け取れるので、その情報を元に時計を書き換えることになります。</p>
<pre><code>function updateClock(h:uint, m:uint, s:uint):void;</code></pre>
<p><strong>・updateDescription メソッド</strong><br />
テキストを表示するカスタムクラスの場合、テキストが書き換わったタイミングでupdateDescriptionメソッドが呼び出されます。<br />
引数としてmessage（テキストの内容)を受け取れるので、その情報を元にテキストを書き換えることになります。</p>
<pre><code>function updateDescription(message:String):void;</code></pre>
<p>　</p>
<p>以下、テキスト部分のカスタムクラスです。時計部分を3つのTextFieldに分けています。ソースコードは上記と合わせてsample\06に入っています。</p>
<pre><code>package {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import org.libspark.eseclock.Eseclock;
    import org.libspark.eseclock.textfield.IEseclockTextField;

    public class CustomClockField extends Sprite implements IEseclockTextField {

        //ライブラリのCustomDescriptionFieldシンボルの中に配置してあるTextField
        public var hours:TextField;
        public var minutes:TextField;
        public var seconds:TextField;

        /**
         * objectWidth, objectHeightは時計全体のサイズを返す
         */
        public function get objectWidth():Number { return seconds.x + seconds.textWidth; }
        public function get objectHeight():Number { return hours.textHeight; }

        /**
         * コンストラクタ
         */
        public function CustomClockField():void
        {
            //それぞれのTextFieldのフォーマットを調整
            var fmt:TextFormat = hours.defaultTextFormat;
            fmt.letterSpacing = -3;
            hours.defaultTextFormat   = fmt;
            minutes.defaultTextFormat = fmt;
            seconds.defaultTextFormat = fmt;
        }

        /**
         * 色を設定する関数
         * @param color 16進数で表された色情報
         */
        public function setColor(color:uint):void
        {
            //それぞれのTextFieldの色を更新
            var fmt:TextFormat = hours.defaultTextFormat;
            fmt.color = color;
            hours.defaultTextFormat   = fmt;
            minutes.defaultTextFormat = fmt;
            seconds.defaultTextFormat = fmt;
        }

        /**
         * 時計表示を更新する関数
         * @param h 時
         * @param m 分
         * @param s 秒
         */
        public function updateClock(h:uint, m:uint, s:uint):void
        {
            //それぞれのTextFieldのtextを更新
            hours.text   = Eseclock.toDigitString(h);
            minutes.text = Eseclock.toDigitString(m);
            seconds.text = Eseclock.toDigitString(s);
        }

        /**
         * テキストを更新する関数
         * @param message 表示文字列
         */
        public function updateDescription(message:String):void
        {
            //CustomClockFieldは時計用クラスなので何も書かなくて良い
            //テキスト用のカスタムクラスを作るときは textField.text = message; などと書く
        }
    }
}</code></pre>
<p>&gt;&gt;<a href="http://lab.alumican.net/eseqlock/sample06.html" rel="shadowbox">Sample（上記サンプルと同じもの）</a></p>
<p>最後に、時計部分にTextFieldすら使用しないサンプルを置いておきます。基本方針は上述の、TextFieldを3つに増やすカスタマイズと同じです。ライブラリに空のシンボルを作り、CustomClockFieldクラスに関連付けておきます。ソースコードは上記と合わせてsample\07に入っています。<br />
&gt;&gt;<a href="http://lab.alumican.net/eseqlock/sample07.html" rel="shadowbox">Sample</a></p>
<p>Eseclockは時計の下にテキストが配置されるように、objectHeightを用いて自動でy座標を調整します。上記サンプルでは時計とテキストを常にEseclockの中心に配置したかったので、objectWidthとobjectHeightが0を返すようにしています。こうすることで座標調整はおこなわれず、両インスタンスの原点が常にEseclockの中心に揃うよう配置されるようになります。（インスタンスそれぞれの原点が、時計の中心もしくはTextFieldの中心に無ければなりませんが）。<br />
　</p>
<p><strong>終わりに</strong><br />
3回にわたって書いたEseclockのエントリですが、これで終わりにしたいと思います。いったいどれくらいの人が読んでくれているのかは分かりませんが（笑）、楽しいEseclockライフを送ってもらえればうれしいです。<br />
僕はEseclockばかり考えすぎて、ついUNIQLOで買い物をしてしまいました、1万円分（笑）</p>
<p>質問事項はコメント欄やメールでお気軽にどうぞー(o’c_,`人)・:*:・</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/04/14_152001/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

