<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">

<channel>
<title>UA LABO -Love Labo ver.c.o.a-</title>
<link>http://www.ua-labo.com/</link>
<description>Last update of "UA LABO -Love Labo ver.c.o.a-".</description>
<language>ja</language>
<copyright>Copyright Uniteair Co.,Ltd. All rights reserved.</copyright>
<lastBuildDate>Fri, 21 May 2010 14:02:00 +0900</lastBuildDate>
<item>
<title>Flash＆ActionScript3.0　プロが教える"本当の使い方"</title>
<category>FLASH</category>
<description><![CDATA[<br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="6116B.gif" src="http://www.ua-labo.com/images/6116B.gif" class="mt-image-none" style="" width="170" height="240" /></span><br /><br />だいぶご無沙汰してしまいました。chikathreesixです。<br />弊社インタラクションデベロッパー４名が執筆に参加した書籍「Flash＆ActionScript3.0　プロが教える"本当の使い方"」が本日発売となりました。<br /><br />執筆したコンテンツは以下です。<br />・P74 <br />西田慎吾（knockknock）<br />「テキストをビットマップ化して１文字ずつトランジションをかける」<br /><br />・P162<br />守屋敬太<br />「スクロールバーを自作する」<br /><br />
・Ｐ170<br />岩田高拡（takaiw）<br />「スコア記録機能のあるゲーム」<br /><br />・P184<br />近澤良（chikathreesix）←僕です<br />「実践的なＦＬＶプレイヤーをつくる」<br /><br /><br />書籍になるというのは感慨深いものですね！<br />ラ・ボラ君も登場しています！<br />是非購入してみてください。<br /><br /><br /><button onclick="window.open('http://www.amazon.co.jp/gp/product/4844361163?ie=UTF8&amp;tag=mdnint-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4844361163');">今すぐ購入する！</button><br /><div><br /></div>]]></description>
<link>http://www.ua-labo.com/#/pid000055</link>
<pubDate>Fri, 21 May 2010 14:02:00 +0900</pubDate>
</item>

<item>
<title>z,rotationY,rotationX,rotationZをつかってみた</title>
<category>ACTIONSCRIPT,FLASH</category>
<description><![CDATA[<p>こんにちは、KnockKnockです。<br />
年度末の忙しさからすっかり更新が滞ってしまいました・・・。<br />
また再開していきます！</p>

<p>今回はFlashPlayer10で実装されているプロパティの<br />
z、rotationY、rotationX、rotationZを試してみました。<br />
3Dだからって難しく考えずFlashPlayer10ならもっと簡単に再現できるはずです。</p>

<p>こんな感じに</p>

<p><script type="text/javascript"> 
swfobject.embedSWF("http://www.ua-labo.com/images/knockknock/sample.swf", "flashcontent", "640", "480", "10", "http://ua-labo.com/common/scripts/ef/expressInstall.swf");  
</script></p> 
<div id="flashcontent"></div> 

<p>まず地面となる表示要素にrotationX=-90で地面が視線から水平に傾きます。<br />
次に地面に乗っけたい表示要素を地面にaddChildして、rotationX=90。<br />
これで地面と垂直に表示されることになります。<br />
地面のどこに立っているかは地面のX、Y座標を考えるだけです。<br />
表示要素をMovieClipにすれば、アニメーションつきます。</p>

<p>面倒なのが深度管理です。<br />
今回のように地面の上だけで深度管理すればすむ場合はシンプルですが、<br />
3Dオブジェクトを複数管理することは・・・、<br />
そこまでするのならPapervision3Dとか使った方がいいと思います。<br />
おそらくそこが、分かれ目かとおもいます。</p>

<p>あとはパースや、消失点の設定はPerspectiveProjectionクラスで変更可能です。<br />
あまりパースをかけすぎると、「生成されるビットマップが大きすぎる！」<br />
と警告が出やすいです。</p>

<p>気をつけなければならないのはフレームアニメーションでも、<br />
3D回転ツールが使えますが結構思うように動きません。<br />
一度経験したのは、3D回転フレームアニメーションを追加した子ムービーが、<br />
単体では再生されるのに、ロードして表示したとたん、まったく表示されなくなりました。<br />
他には、自分の知らないメソッドのエラーが出たり・・・。<br />
深追いする前に、使うのをやめました。<br />
これらが安定するともっといいのですが。</p>

<p>ちなみにFlashPlayer10の2010/3月の普及率はJapanで
97.3%だそうです。<br />
<a href="http://www.adobe.com/products/player_census/flashplayer/version_penetration.html">http://www.adobe.com/products/player_census/flashplayer/version_penetration.html</a></p>

<p>今回触ってみての率直な感想です。<br />
これは楽しい！！！<br />
でも無駄にz軸いじりすぎてしまわないように気をつけましょう。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000054</link>
<pubDate>Fri, 16 Apr 2010 19:38:13 +0900</pubDate>
</item>

<item>
<title>iPhone＋OpenGLの書籍</title>
<category>OTHERS</category>
<description><![CDATA[<p>今年はスマートフォンに手を出しますと<br />年初に宣言したのですが、<br />遅まきながらiPhoneアプリを作ろうと<br />思い、色々書籍をあさりました。<br />その中でお勧めの本があります。</p>
<p><a href="http://www.amazon.co.jp/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.co.jp%2Fgp%2Fproduct%2F4844328085%3Fpf_rd%5Fm%3DAN1VRQENFRJN5%26pf%5Frd%5Fs%3Dcenter-2%26pf%5Frd%5Fr%3D1Z48AF4NXDVD2ADV65RR%26pf%5Frd%5Ft%3D101%26pf%5Frd%5Fp%3D463376756%26pf%5Frd%5Fi%3D489986&amp;tag=taka10190f-22&amp;linkCode=ur2&amp;camp=247&amp;creative=1211" target="_blank"><img height="135" src="http://ecx.images-amazon.com/images/I/41yfEMKM3AL._SL135_.jpg" width="106" /><img style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: 0px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" height="1" alt="" src="http://www.assoc-amazon.jp/e/ir?t=taka10190f-22&amp;l=ur2&amp;o=9" width="1" border="0" /><br /><a href="http://www.amazon.co.jp/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.co.jp%2Fgp%2Fproduct%2F4844328085%3Fpf_rd%5Fm%3DAN1VRQENFRJN5%26pf%5Frd%5Fs%3Dcenter-2%26pf%5Frd%5Fr%3D1Z48AF4NXDVD2ADV65RR%26pf%5Frd%5Ft%3D101%26pf%5Frd%5Fp%3D463376756%26pf%5Frd%5Fi%3D489986&amp;tag=taka10190f-22&amp;linkCode=ur2&amp;camp=247&amp;creative=1211" target="_blank">OpenGLで作るiPhone SDKゲームプログラミング</a><img style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: 0px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" height="1" alt="" src="http://www.assoc-amazon.jp/e/ir?t=taka10190f-22&amp;l=ur2&amp;o=9" width="1" border="0" /></p>
<p>この本は内容そんなに難しくないのですが、<br />構成や流れが制作者目線で良かったです。<br />リファクタリングに紙面を惜しみなくつぎ込んでいるのが<br />ホントにほほえましいです。</p>
<p>著者は私より年齢が一回りくらい下なんですが、<br />すごいですね。 </p>
<p>3Dのところはまだ読んでませんが、とりあえず2Dゲームを<br />OpenGL ESで作ろうと思っているので、制作ははじめてます。<br />簡単なゲームといえど、1人作ると結構大変です。<br />4月中目標で仕上げたいと思ってます。<br />iPad版も作れるといいけど。</p>
<p>プログラム自体はObjective-C++で<br />制作しているのですが、<br />言語がJavaやActionScriptと違うので<br />多少戸惑いがありますね。</p>
<p>動くと思って組んだ単純なプログラムが<br />動かなかったとき、必死で一二時間デバッグして<br />原因を突き止めたと思ったら、<br />型が違うだけだったとか...</p>
<p>慣れてない言語だと凡ミスに注意ですね！<br />慣れてると理論的に対処できるのですが、<br />そうでないと、疑心暗鬼になってしまい<br />色々無駄な作業をしてしまいます。</p>
<p>コンピューターって人間が理論的に<br />作り出したものであるため100％理屈が<br />通るはずです。</p>
<p>自らが順調でないときに不具合が出ても、<br />がむしゃらにデバッグしないで、<br />一旦引いて考えてから動かないと、ですね。</p>
<p>とはいえ、ソフトウェアはOSに依存するし<br />ましてやFlashなんてプラグインだから、<br />不具合は自らの原因だけではないんですけどね...。</p>
<p>&nbsp;</p>]]></description>
<link>http://www.ua-labo.com/#/pid000053</link>
<pubDate>Mon, 08 Mar 2010 00:38:35 +0900</pubDate>
</item>

<item>
<title>web creators ３月号 執筆情報</title>
<category>OTHERS</category>
<description><![CDATA[こんにちは、chikathreesixです。<br />先日発売したweb creators 3月号に弊社UI開発部の３名が執筆しました。<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="wc_cover3_99.gif" src="http://www.ua-labo.com/images/chikathreesix/wc_cover3_99.gif" class="mt-image-none" style="" width="150" height="199" /></span><br /><br />・P.44「CSSにおける幅と高さの仕様を理解する」水谷公俊<br />・P.127「Photoshop不要でPSDファイルの内容確認と加工・編集を行う」西田慎吾<br />・P.133「スクリプトの固定で複数のアクションを同時に編集する」西田慎吾<br />・P.134「「TEKICO」を使ってすばやくダミーテキストを生成する」近澤良（僕です）<br /><br /><br />そうです、TEKICO（テキコ）をweb creatorsに載せてもらうことができました！<br />作業の効率化という意味で最適のアプリだと思います。<br /><br /><br />そしてTEKICO（テキコ）ですが、色々なところで取り上げられてきています！<br /><br /><a href="http://www.forest.impress.co.jp/docs/review/20100125_344235.html" target="_blank">窓の杜</a><br /><a href="http://news.livedoor.com/article/detail/4538070/" target="_blank">livedoor news</a><br /><a href="http://adobe-ria.jp/air" target="_blank">Adobe AIR Gallery</a><div><a href="http://caroccyblog.blog9.fc2.com/blog-entry-425.html" target="_blank">カロシーのブログ</a><br /><a href="http://puzzel.jp/blog/2010/%E3%82%BD%E3%83%95%E3%83%88-%E3%83%80%E3%83%9F%E3%83%BC%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%8F%E3%82%8C%E3%82%8B%E3%82%BD%E3%83%95%E3%83%88-%E3%80%8Ctekico.html" target="_blank">Bonnie styles.</a><br /><br />みなさんありがとうございます。<br />是非どんどんテキコしてくださいね！<br /><br /></div><div><br /></div>]]></description>
<link>http://www.ua-labo.com/#/pid000052</link>
<pubDate>Mon, 01 Feb 2010 21:37:54 +0900</pubDate>
</item>

<item>
<title>インターフェースの多重継承</title>
<category>ACTIONSCRIPT</category>
<description><![CDATA[<p>最近社内ではインフルエンザが猛威を奮っています。<br />皆さんもお体をお大事にしてくださいね。</p>
<p>つい最近、現在公開中のコンテンツの改修のお仕事のご相談を<br />いただきまして、ソースを提供されました。</p>
<p>それをつらつらとチェックしてると、<br />結構インターフェースを多用していて、なかなかできる人だな<br />と感心していると、下記のようなソースに出くわしました。</p>
<p>&nbsp;<pre class="actionscript" name="code">interface IHoge extends IBitmapDrawable,IEventDispatcher{
...
}</pre><br />（IHogeは仮です） 
<p></p>
<p>インターフェースの継承についてはもちろん理解していたのですが、<br />多重継承できるとは思ってなかった...。</p>
<p>確かにインターフェースはクラスの多重継承ができないから<br />作られたものだと読んだことがありますが、<br />インターフェースならば多重継承できるんですね。</p>
<p>自前のインターフェースで早速適用してみたら、案の定上手くいきましたね。<br />Javaでもそうなっているようです。知らんかった...</p>
<p>これで、単機能的なインターフェースを無理やり継承させず、<br />上手く設計できると思いましたね。<br />複数の単機能インターフェースを備えたインターフェースを<br />設計することもできます。<br />（A,BをそなえたCを作るために<br />B extends AとしてC extends Bとしたくないので、泣きながら<br />諦めていたのですが、多重継承だとC extends B,Aとでき、<br />Bを他のBだけを要するインターフェースおよびクラスに<br />使うことができます。）<br />やりたかったんだなぁ、これ。</p>
<p>でも適当に設計するとすぐにぐちゃぐちゃになると思うので<br />ご注意を。</p>
<p>そのことを話すとインターンのmoriyak君はワクワクしてましたね。<br />こういう新人がもっと増えるとうれしいですね。</p>
<p>物事は隅々まで読まないとなぁと思いました。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000051</link>
<pubDate>Thu, 28 Jan 2010 01:14:02 +0900</pubDate>
</item>

<item>
<title>U/A自動化倶楽部 Vol4 選択範囲以外をグレーアウトしてJPEG書き出し</title>
<category>JAVASCRIPT,PHOTOSHOP</category>
<description><![CDATA[<p>こんにちは、knockknockです。<br />
今回の自動化は選択範囲以外をグレーアウトしてJPEG書き出しするスクリプトです。<br />
デベロッパーにはあまり縁がないかもしれませんが、PhotoShopでデザイン修正した際等、変更点がわかりやすいようなJPEG画像を書き出します。<br />
使用技術はPhotoShopJSのみで、シンプルなものです。</p>

<p>サンプルファイルは以下<br />
<span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://www.ua-labo.com/images/knockknock/knockknock20100120.lzh">knockknock20100120.lzh</a></span></p>

<p>使用ステップは以下の通りです。</p>

<p>１）まずはグレーアウトしない部分を選択範囲として選びます。</p>
<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20100120image0.jpg" src="http://www.ua-labo.com/images/knockknock/20100120image0.jpg" width="438" height="426" class="mt-image-none" style="" /></span></p>

<p>２）ファイル＞スクリプト＞参照、からサンプルファイルの「選択範囲以外をグレーアウトしてJPEGに書き出す.jsx」を選択します。</p>
CS4の場合「C:\Program Files\Adobe\Adobe Photoshop CS4\Presets\Scripts」以下にJSXファイルをあらかじめ配置しておくことで、<br />
ファイル＞スクリプト＞選択範囲以外をグレーアウトしてJPEGに書き出す、<br />
というように直接選択できるようにもできます。<br />
さらにはショートカットに登録することも。</p>
<p><img alt="20100120image1.jpg" src="http://www.ua-labo.com/images/knockknock/20100120image1.jpg" width="832" height="424" class="mt-image-none" style="" /></p>

<p>３）確認アラートがでます。</p>
<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20100120image2.jpg" src="http://www.ua-labo.com/images/knockknock/20100120image2.jpg" width="332" height="120" class="mt-image-none" style="" /></span></p>

<p>４）書き出すJPEGファイル名を聞かれます。</p>
ここで何も入力しなければ、PSDファイルと同名のJPEGになります。<br />
<p><img alt="20100120image3.jpg" src="http://www.ua-labo.com/images/knockknock/20100120image3.jpg" width="527" height="164" class="mt-image-none" style="" /></p>

<p>５）あとは自動処理が終わるのを待つだけです。<br />
これが出力結果のJPEGです。</p>
<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20100120image4.jpg" src="http://www.ua-labo.com/images/knockknock/20100120image4.jpg" width="512" height="553" class="mt-image-none" style="" /></span></p>

<p>ディレクターの方（PhotoshopCS以降がインストールされてれば・・）、デザイナーの方、是非ご利用ください。<br />
ちなみに自分は使う機会がないですが。<br />
では、次回の自動化をお待ちください。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000050</link>
<pubDate>Wed, 20 Jan 2010 17:30:12 +0900</pubDate>
</item>

<item>
<title>2010謹賀新年</title>
<category>OTHERS</category>
<description><![CDATA[<br />あけましておめでとうございます！<br />今年年男（3回目）の管理人です。<br /><br />記者も減り投稿数も減りましたが、<br />今年は何か面白いことを掲載できれば<br />と思っています。<br /><br />ちなみにこちらが<br />弊社ユナイティアの<b>年賀サイト</b>です。<br /><br /><a href="http://www.uniteair.co.jp/rakugakizome2010/" target="_blank"><img src="http://www.uniteair.co.jp/img/main/banner_rakugaki2010.png" alt="うちの社長を落書き初め 謹賀新年2010 年賀サイト公開中" height="75" width="720" /></a><br /><br />ただの新年のご挨拶か...と思いきや、<br />筆を取ってみてください、<font style="font-size: 1.25em;"><b>何か起こります。</b></font><br /><br />インターンのmoriyak君が先輩（私以外）の<br />サポートを受けながらオーサリングしてくれました。<font style="font-size: 1.25em;"><b></b></font><br /><br />かなり有望な青年で将来が非常に<br />楽しみです！というか弊社は若手自体が<br />すごく優秀なので、私としては嬉しい<br />危機感ですね！<br /><br /><br />今年の抱負といってはなんですが、<br />AIRアプリをキチンと作ることと<br />スマートフォンの類にも挑戦して<br />ゆきたいと思っています。<br /><br />AIRアプリの方は遅々として進んでなく、<br /><a href="http://www.uniteair.co.jp/app/" target="_blank"><b>弊社のアプリサイト</b><br />http://www.uniteair.co.jp/app/</a><br />で優秀な後輩に先に抜かれる始末（苦笑）。<br /><br />スマートフォンに関しては<br />もうかなり遅めですがiPhoneとか<br />逆に今年来るであろうAndroidとかを<br />模索しつつ進めていきたいと思ってます。<br />春までにOpenGLを使って何かしたいと<br />思ってます。どっちでも使えますからね。<br /><br />しばらくiPhoneの一人勝ちが続くであろうと<br />思うので、Cocoaを覚えようと思い、<br />先日iMacを個人的に買ってしまいました。<br />Androidの方はWindowsで開発できるのですが<br />これだけはApple様に屈さないといけません。<br /><br />別にMacMiniでも良かったのですが、<br />Windows7がやりたいのと、新しいモニタが<br />欲しいのとが重なって、<br /><font style="font-size: 1.25em;"><b>「それだったらiMacでいいじゃん」</b></font><br />と自分で納得して買ってしまいました！<br />すると事前調査が足りないせいか、<br />色々と問題が発生しました。<br /><br />最大の問題はモニターです。<br /><b>わくわく</b>しながらモニターをつけました。<br /><font style="font-size: 1.25em;"><b>「おお、鮮やかだな～」</b></font><br />と感動してしまい、つい、モニターに凝視を続けました。<br />怪光線（太陽拳？）を放ち続けているのも知らずに...<br /><br />しばらく経つと目が痛くなって、<br />ゴロゴロしはじめました。<br /><font style="font-size: 1.5625em;"><b>「これが眼精疲労か！」</b></font><br /><br />輝度を下げても、映り込みが激しいので<br />正直ストレスがたまります。<br /><br /><br /><b>「これではいけない！」</b>と神様は色々と対策を<br />講じられた結果、私に次の<font style="font-size: 1.25em;"><b>三択</b></font>を出されました。<br /><br /><b>1.ソフマップにiMacを売ってMacMiniを買う<br />2.モニタの保護シートを買う<br />3.Mini DVI-VGAアダプタを買って今までのモニタを使う</b><br /><br />※ちなみに今のモニタはナナオの19インチ液晶モニタです。<br /><br />1は部屋が狭いので一番良策なのですが、<br />手間と時間がかかりそうなので、<br />最後の切り札にしようとおもい、<br />まず一番iMacを買ったことを否定しない2の策にしました。<br /><br />色々調べたら下記の商品が見つかって、大晦日買いに行きましたよ<br />実際のモノを見ると<font style="font-size: 1.25em;"><b>割高感</b></font>が出まくりです。悪くは無いのですが。<br /><br /><b><a href="http://www.biccamera.com/bicbic/jsp/w/catalog/detail.jsp?JAN_CODE=4519756804412" target="_blank">パワーサポート アンチグレアフィルム</a></b><br /><br />紅白歌合戦を見ながら、せっせと貼っていましたが、<br />気泡に気をつけないといけないので時間がかかりました。<br />とりあえず、映り込みがなくなり、マシになりましたが<br />目を凝らしてみると、微かにPhotoShopのノイズのような<br />模様が見えます。それって、色の表現力がかなり殺がれるので<br />前のモニタに比べればダメって事ですね。<br />イラレとかで絵を描いたりするのが好きなのですが、<br />それは、今までのマシン＆モニタで行うか、3の策を取るしかありません。<br />3になると、ただの本体になってしまうのですが、プライマリーディスプレイに<br />今のディスプレイを指定して、iMacのディスプレイに寝てもらうことが<br />できればそれもアリかなと思いましたね。<br /><br />今回の買い物はMacMiniにしておけばよかったと思った反面<br />グレアとノングレアについて体感できたので、<br /><b>授業料といえば授業料</b>です。<br />店頭でグレアモニタを見て何も感じないのは<br />照明が明るいのと、見る時間が短いからです。<br /><br /><b><a href="http://plusd.itmedia.co.jp/pcupdate/articles/0505/26/news001.html" target="_blank">光沢（グレア）液晶 vs. ノングレア液晶</a></b><br />http://plusd.itmedia.co.jp/pcupdate/articles/0505/26/news001.html<br /><br />現行のiMacについてはグレアしかないので<br /><b>Mac大好きデザイナー</b>さんとかは<b>やめたほうがいいですね</b>。<br />MacMiniとノングレアモニタにした方がいいです。<br />色を気にされない方でしたら、保護シートをつければ普通に<br />使えると思います。<br /><br /><br />ラボとはあんまり関係ないですが、<br />年始のご挨拶とさせていただきました。<br /><br />今年もご愛顧のほど、よろしくお願いいたします。<br /><br />]]></description>
<link>http://www.ua-labo.com/#/pid000049</link>
<pubDate>Sun, 03 Jan 2010 01:40:08 +0900</pubDate>
</item>

<item>
<title>TEKICO(テキコ）リリース</title>
<category>AIR</category>
<description><![CDATA[こんにちは、最近クロスバイクにハマっているchikathreesixです。<br />この前の日曜日にknockknockさんと幕張メッセまでチャリで行ってきました！<br />筋肉痛が未だに治らない。。<br /><br />さて、iPhoneアプリ、mixiアプリなどアプリケーションがアツいこの頃ですが、<br />弊社もアプリケーションへの取り組みを行おうということでAIRアプリ<a href="http://www.uniteair.co.jp/app/air/pid_001.html" target="_blank">「TEKICO（テキコ）」</a>を第一弾として公開しました。今後も<a href="http://www.uniteair.co.jp/app/" target="_blank">U/A app</a>にてアプリをどしどしリリースしていく予定です。<br /><br /><br /><a href="http://www.uniteair.co.jp/app/air/pid_001.html" target="_blank">「TEKICO（テキコ）」</a>は和文・欧文のダミーテキストが簡単に作成できるAIRアプリケーションです。今までダミーテキストジェネレーターは欧文を生成するものが多く、デザインに和文を入れたい時に困っていたという不満から開発に至りました。<br /><br /><br />使い方はいたってシンプル！<br />まず下記サイトよりダウンロードしてインストールを行います。<br /><a href="http://www.uniteair.co.jp/app/air/pid_001.html" target="_blank">http://www.uniteair.co.jp/app/air/pid_001.html</a><br /><br /><br /> 
<img src="http://ua-labo.com/images/chikathreesix/tekico/tekico_step1.jpg" /><br /><br /> <br />
起動すると以下のようなウィンドウが立ち上がります。<br /><br />
<img src="http://ua-labo.com/images/chikathreesix/tekico/tekico_img.jpg" /><br /><br />
下の「ダミーテキストをつくる」ボタンを押せば一発でダミーテキストが生成され、となりのボタンか、ctrl＋cで生成されたダミーテキストがクリップボードにコピーできます。<br />何も考えずにボタンを押すだけです！<br /><br /><br />また設定も可能です。設定について上から説明していきます。<br /><br />（１）　和文か欧文を選択します。<br />（２）　生成されるダミーテキストの文頭に表示する文章を編集します。消すこともできるし、自由な文をおくこともできます。<br />（３）　生成するダミーテキストの長さを設定します。段落数か文字数から選択します。<br /><br />これらの設定はアプリを終了した際に自動的に保存されます。<br />「この情報を保存する」のチェックを外すと今回設定されたものは保存されません。<br />デフォルトに戻したいときは「初期状態に戻す」をクリックします。<br /><br /><br />如何でしょう？<br />文字組みのデザインを行う方にとってはかなり便利なアプリになっていると思います。<br />是非お試しください！！<br /><br /><br />ご意見ご感想などは、<br />
<a href="mailto:air-appli@uniteair.co.jp">air-appli@uniteair.co.jp</a><br />までどしどしお寄せください。<br /><br />

]]></description>
<link>http://www.ua-labo.com/#/pid000047</link>
<pubDate>Tue, 15 Dec 2009 15:39:44 +0900</pubDate>
</item>

<item>
<title>ビットマップのテキストを文字ごとに分割してトランジションをかける（３）</title>
<category>ACTIONSCRIPT,FLASH</category>
<description><![CDATA[<p>こんにちはKnockKnockです。</p>

<p>U/ALaboリニューアルおめでとうございます。<br />
すごく使いやすくなりましたね。<br />
コーディング担当してくれたDECOさんに感謝です。</p>

<p>今回は「ビットマップのテキストを文字ごとに分割してトランジションをかける」の最終回。<br />
ジェネレーター的なものを作ってみました。</p>

<p><script type="text/javascript"> 
swfobject.embedSWF("http://www.ua-labo.com/images/knockknock/TextTransitionMaker.swf", "flashcontent", "800", "800", "9", "http://ua-labo.com/common/scripts/ef/expressInstall.swf");  
</script></p>
<div id="flashcontent"></div>

<p>一枚のビットマップを文字ごとに分割してアニメーションをかけるライブラリです。<br />
ためしに「reference」ボタンで画像を選んで「start」ボタンをクリックしてください。<br />
※選択する画像は背景が透過してあるPNGでないといけません。</p>

<p>アニメーションの種類はいろいろといじって確認してください。</p>
<p>実際の組み込み方法は、以下の通りです。<br />
---------------------------------------------------------<br />
１）以下のクラスファイルをクラスパスに指定してあるフォルダにコピーしてください。<br />
</p><span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://www.ua-labo.com/images/knockknock/knockknock091116.lzh">knockknock091116.lzh</a></span><br />
２）先ほどの画面上のCODEテキストエリアをすべてコピーしてソースにペーストしてください。<br />
<br />
３）３行目のTARGETをアニメーションをかけたいオブジェクトの参照に書き換えてください。<br />
var transitionText:TransitionText = new TransitionText( TARGET );<br />
<br />
４）パブリッシュして完了です。<br />
---------------------------------------------------------<p></p>
<p>これでテキストトランジションは終了です。<br />
さっそく案件で使ってみましたが今のところ良好です。<br />
機会があれば使ってみていただけると嬉しいです。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000045</link>
<pubDate>Mon, 16 Nov 2009 11:00:20 +0900</pubDate>
</item>

<item>
<title>NaNとDisplayObjectの座標</title>
<category>ACTIONSCRIPT</category>
<description><![CDATA[<p>もうすぐUA-LABOもリニューアルします！<br />実験的にフレーム＆Flashを使ってしまって、ちょっと<br />使い勝手が悪かったので、普通のHTMLに一旦直して<br />読みやすくしていきたいと思います。<br />最近は後輩の良い記事がでてきましたので...。</p>
<p>公開されてからもう半年を過ぎまして、<br />記者も減りましたが、まだまだがんばってゆきたいと思います。</p>
<p>今回は、つい最近ハマったプチ問題をメモ代わりに書きますね。</p>
<p>NaNというものをご存知だと思いますが、NaNというのは<br />Numberの型で数字で無いもの（Not a Number）を指します。</p>
<p>ここでいう数字とは正確には「倍精度浮動小数点数」といいます。</p><pre class="actionscript" name="code">var num:Number = Number("あああ");
trace(num);
</pre><br />上記のように数字でないものを数字にキャストしようとすると、 
<p></p><pre class="actionscript" name="code">NaN
</pre>
<p>というトレース結果になり、</p>
<p>Number,uint,intなどの数字以外は<br />NaNになります。</p>
<p>そしてNumberの初期値、つまり<br />下記のように何も代入しない場合も<br />トレース結果がNaNになります。</p><pre class="actionscript" name="code">var num:Number;
trace(num);
</pre>
<p><br />このNaNをDisplayObjectクラスの<br />xおよびyに代入すると<br />ブラウザによって挙動が変わってしまいます。</p>
<p>たとえば<br /><pre class="actionscript" name="code">var sp:Sprite = new Sprite(); 
var g:Graphics = sp.graphics; 
g.beginFill(0xff0000,1); 
g.drawRect(0,0,100,100); 
this.addChild(sp); 
sp.x = NaN; 
sp.y = 200; </pre><br />のように書きます。 
<p></p>
<p>wonderflでも一応書いておきました。各ブラウザでも確認してもらえればと思います。</p>
<div style="WIDTH: 465px; TEXT-ALIGN: center"><iframe title="forked from: forked from: flash on 2009-11-4 - wonderfl build flash online" style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid" src="http://wonderfl.net/blogparts/108582d0952decf83cd0fbc8ae80d26038bd9bec" width="465" scrolling="no" height="490"></iframe></div>
<p><strong>■パブリッシュプレビュー</strong><br />0になります。</p>
<p><strong>■XP+IE7</strong><br />表示されません。</p>
<p><strong>■XP+FF</strong><br />0になります。</p>
<p><strong>■XP+GC</strong><br />0になります。</p>
<p><strong>■Vista+IE7</strong><br />0になります。</p>
<p><strong>■Vista+FF</strong><br />表示されません。</p>
<p><strong>■Vista+GC</strong><br />表示されません。</p>
<p>OSとブラウザによって全然変わりますね...。<br />筆者はこれだけしか確認できてませんが、<br / / />他のも確認してもらえればと思います。</p>
<p>プレビュー上で表示されていたので<br />安心していましたが<br />ブラウザによって表示されなくなる場合もあるので<br />注意してください。</p>
<p>座標にはハッキリした値を代入できれば問題ないのですが<br />プロパティ変数を座標に入れ込むとなった際に<br />そのプロパティ変数も別のプロパティ変数の<br />四則演算を施した後ですと、<br />どれかがnullやNaNであればNaNになってしまいます。<br />しかも、例外をthrowしないのでバグが潜伏して<br />しまいます。<br />setterのx,yにNaNを代入しようとすると例外をthrowするように<br />してほしかったのですけどね。</p>
<p><br />このブラウザだと消えてしまうんだけど...と言われたときに<br />思い出してもらえれば嬉しいですね。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000042</link>
<pubDate>Thu, 05 Nov 2009 19:41:42 +0900</pubDate>
</item>

<item>
<title>ビットマップのテキストを文字ごとに分割してトランジションをかける（２）</title>
<category>ACTIONSCRIPT</category>
<description><![CDATA[<p>こんにちはKnockKnockです。<br /><br />
引き続き「ビットマップのテキストを文字ごとに分割してトランジションをかける」の第二回です。<br />
TweenTextクラスのサブクラスTweenTextCustomクラスを作成しました。<br />
startTweensをオーバーライドして、トランジションのバリエーションをつくりました。</p>

<p><script type="text/javascript"> 
swfobject.embedSWF("http://ua-labo.com/images/knockknock/tweenTextCustom.swf", "flashcontent", "640", "480", "9", "http://ua-labo.com/common/scripts/ef/expressInstall.swf");  
</script></p><div id="flashcontent"></div>
<p></p>

<span class="mt-enclosure mt-enclosure-file" style="display: inline;">サンプルファイルは<a href="http://ua-labo.com/images/knockknock/knockknock091030.lzh">こちら</a></span>

<p></p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20091030image0.jpg" src="http://ua-labo.com/images/knockknock/20091030image0.jpg" width="392" height="520" class="mt-image-none" style="" /></span><p></p>
<p>結構遊べますね。<br /><br />
次回は、これをUAのフレームワークに組み込むために<br />
リーダーからいろいろと指摘を受けたのを反映させて、<br />
ジェネレーターちっくなものを作ろうかと思っています。<br /><br />
では、また。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000041</link>
<pubDate>Fri, 30 Oct 2009 11:17:00 +0900</pubDate>
</item>

<item>
<title>ビットマップのテキストを文字ごとに分割してトランジションをかける</title>
<category>ACTIONSCRIPT</category>
<description><![CDATA[<p>こんにちはKnockKnockです。<br />
今回はいつもの自動化とは違う内容です。<br /><br />
よく文字ごとにトランジョンかけたいときにめんどくさい思いして<br />
一文字ずつ切り出してシンボル化して。<br />
で、修正入ってまた切り出しなおして・・・。<br />
チョーめんどくさいけど、それやると「おぉっ！」ってなるし。<br />
という感じに頭を悩ますことが多いかと思います。<br />
なのでそれを自動でトランジションかけるスクリプト作成しました。<br /><br />
結局自動化なのかなぁ。</p>
<p><script type="text/javascript"> 
swfobject.embedSWF("http://ua-labo.com/images/knockknock/tweenText.swf", "flashcontent", "640", "480", "9", "http://ua-labo.com/common/scripts/ef/expressInstall.swf");  
</script> 
</p><p></p><div id="flashcontent"></div><p></p>
<p>サンプルファイルは<a href="http://ua-labo.com/images/knockknock/knockknock091028.lzh">こちら</a></p>
<p><img src="http://ua-labo.com/images/knockknock/20091028image0.jpg" alt="20091028image0.jpg" width="392" height="407" class="mt-image-none" style="" /></p>
<p>TextInfoクラス：<br />
コンストラクタの引数に分割する対象のDisplayObjectContainerを渡して<br />
initializeすると文字の情報を取得します。</p>
<p>TweenTextクラス：<br />
コンストラクタの引数に分割する対象のDisplayObjectContainerを渡して<br />
initializeすると文字情報を元に、文字ごとにビットマップを作成します。</p>
<p>分割ロジックは対象オブジェクトをビットマップにDrowして<br />
すべてのピクセルのアルファチャンネルを取得して文字の描画してある範囲を取得します。</p>
<p>注意点<br />
※文字が縦横1ピクセル以上離れていないと（アンチエイリアスの部分がかぶっててもダメ）同一の文字として判定されてしまいます。<br />
※横並びの文字のみ対応です。<br />
※今回トランジションにはTweenerを利用しています。<br />
※座標は左上に合わせてください。</p>
<p>肝心のトランジションに関してはTweenTextクラスのstartTweensをオーバーライドして<br />何かこった演出を加えてください。</p>
<p>という感じです。次回にこれを利用したいろいろなトランジションを紹介しようと思います。</p>
<p>よろしくお願いします。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000040</link>
<pubDate>Wed, 28 Oct 2009 10:58:24 +0900</pubDate>
</item>

<item>
<title>Papervision3Dの計算ロジックのみを使う</title>
<category>ACTIONSCRIPT</category>
<description><![CDATA[だいぶご無沙汰してしまいました、chikathreesixです。<br />Loud Parkまであと少し！<br />でっかいサークルピットができるんだろうな～とわくわくしてます。<br /><br /><br />さて先日ローンチされた案件でPapervision3Dを使っているのですが、3D空間に表示オブジェクトを表示するけれど、パースなどの変形をさせたくない状況にぶつかりました。<br />つまり3D座標の計算ロジックのみを使いたいという状況です。<br /><br />PapervisionのDisplayObject3Dには<a class="signatureLink" href="http://papervision3d.googlecode.com/svn/trunk/as3/trunk/docs/org/papervision3d/objects/DisplayObject3D.html#screen">screen</a>というNumber3D型のプロパティがあり、これのx,yでスクリーン座標を取得することができます。zは正確にはよくわからないのですが、カメラからの距離かと思われます。<br /><br />ところが、ここに落とし穴が。。<br />単にインスタンスを生成してプロパティを参照するだけでは、どうやって試しても値が0になってしまうのです。<br />DisplayObject3Dの<a class="signatureLink" href="http://papervision3d.googlecode.com/svn/trunk/as3/trunk/docs/org/papervision3d/objects/DisplayObject3D.html#autoCalcScreenCoords">autoCalcScreenCoords</a>プロパティをtrueにしておかないとscreenに値が入らないのです。<br />ハマりました。。<br /><br /><br /><br />さて、これで準備は整いました。<br />screen.xとscreen.yは0を中心とした値なので、表示したい領域の中心座標を足しましょう。<br />拡大縮小とzソートを行いたい場合は自分で実装する必要があります。<br />今回その必要があったので、以下のように行いました。<br /><br /><br />z位置に応じたスケールは以下のように求まります。<br />
bolaはDisplayObject、bola3dはDisplayObject3Dです。<br /><br /> 
<pre class="actionscript" name="code">bola.scaleX = bola.scaleY = _camera.focus / (_camera.focus + bola3d.screen.z) * _camera.zoom</pre><br />zソートはプロパティからバブルソートしました。<br /><br /> 
<pre class="actionscript" name="code"> private function _sort(arr:Array):void {
		var i:int
		var j:int;
		var temp:DisplayObject3D;

		for (i = 0; i &lt; arr.length - 1; i++) {
			for (j = arr.length - 1; j &gt; i; j--) {
				if (arr[j - 1].screen.z &gt;arr[j].screen.z) {  /* 前の要素の方が大きかったら */
					temp = arr[j];        /* 交換する */
					arr[j] = arr[j - 1];
					arr[j - 1]= temp;
				}
			}
		}
	}
}
</pre>
<br />以下のようなサンプルを作ってみました。<br />（ちょっと上下にガクガクしてしまうのはバグだと思います。。）<br />←↑↓→ボタンで操作してみてください。<br /><br /><br />
ソースは<a href="http://www.ua-labo.com/_chikazawa/091013/PVTest.as.txt" target="_blank">こちら</a>から<br />

<script type="text/javascript">
swfobject.embedSWF("http://www.ua-labo.com/_chikazawa/091013/pvTest.swf", "flashcontent", "550", "400", "9", "http://ua-labo.com/common/scripts/ef/expressInstall.swf");  
</script>
<div id="flashcontent"></div>]]></description>
<link>http://www.ua-labo.com/#/pid000038</link>
<pubDate>Wed, 14 Oct 2009 20:41:30 +0900</pubDate>
</item>

<item>
<title>U/A自動化倶楽部 Vol3 基本Flashオーサリングの自動化 Progression用</title>
<category>ACTIONSCRIPT,FLASH,JAVASCRIPT,PHOTOSHOP</category>
<description><![CDATA[<p>KnockKnockです。<br />ここ数カ月忙しさにかまけて更新してませんでしたが、ようやく落ち着きましたんで、ぼちぼち記事を載せていきます。</p><p>さて、これまでPhotoShopから各画像の書き出しと、クラスの作成、Flashオーサリングといった自動化の流れを考えてきましたが、今回の自動化は最近、シーン遷移のライブラリとして普及してきているProgressionを利用した自動化です。大まかな流れは変わりませんが、クラス生成時に「<strong>Progression用のクラスを書き出してしまおう</strong>」ということです。これまでは自動化後はシーン遷移等のASのコーディングを行わなければなりませんでしたが、Progression用のクラスとして書き出してしまうことで、簡単なコンテンツでしたら一切のコーディングを必要としなくなります。こうして大幅に省略した時間をクリエイティブに利用することができます。</p>
<p>さっそく方法をご紹介と言いたいのですが、まずはProgressionの概念に関して最低限、シーンとキャストに関して知っておく必要があります。<strong>シーンとはその名のとおりシーン遷移のシーン</strong>です。ただし表示の実態はありません。<strong>キャストとは関連付けられたシーンで表示させたいシンボルの設定</strong>のことを言います。つまりシーンを変更すると、そのシーンに関連付けられたキャストの表示がそれぞれ制御されることになります。これから紹介する自動化の最初のステップにPhotoShopのレイヤーを整理する作業がありますが、シーンとキャストの関係を考えながら整理していく必要があります。</p><p></p><p></p><span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://ua-labo.com/archive/knockknock/knockknock091013.lzh">knockknock091013.lzh</a></span><p></p><p><span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://ua-labo.com/archive/knockknock/knockknock090414.lzh"></a>基本部分オーサリング自動化_Progression用.jsxbin　：　PhotoShopJS<br />基本部分オーサリング自動化_Progression用.mxp　：　Flash拡張ファイル（ダブルクリックで拡張可能）<br />※今回の自動化実行環境はCS4以降となります。</span></p><p></p>
<p>では、その自動化方法の説明です。動作確認状況はCS3、CS4のPhotoShopとFlashです。</p>
<ol>
  <li><a href="#step1">PhotoShopレイヤーの整理</a></li>
  <li><a href="#step2">PhotoShop自動化用JavaScript実行</a></li>
  <li><a href="#step3">Flash自動化用JSFL実行</a></li>
  <li><a href="#step4">その他設定</a></li>
  <li><a href="#step5">パプリッシュ</a></li>
</ol>
<hr>
<h3><a name="step1" id="step1"></a>ステップ1：PhotoShopレイヤーの整理</h3>
<p>デザイン済みの<strong>PSDファイルを、自動化用に整理</strong>します。</p>
<h4>1) インデックスシーンとして最上位にレイヤーセットを作成</h4>
<p>まずシーンをPhotoShopのレイヤーセットで定義していきます。シーンとして必ず必要なものとしてインデックスシーンとなります。ローディング後、一番はじめに表示されるシーンです。この<strong>インデックスシーンとして最上位の階層にレイヤーセットを作成</strong>します。レイヤー名は何でも構いませんが<strong>接頭に必ず「SC_」</strong>をつけてください。</p><p></p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20090729image1.gif" src="http://ua-labo.com/images/knockknock/20090729image1.gif" width="334" height="25" class="mt-image-none" style="" /></span><p></p>
<h4>2) 下層シーンとしてインデックスシーンレイヤーセット以下にレイヤーセットを作成</h4>
<p>インデックスレイヤーセットの直下に第二階層となる下層シーンレイヤーセットを作成します。さらに下層がある場合、<strong>各下層シーンレイヤーセットの直下</strong>に同じようにレイヤーセットを作成し、<strong>レイヤーセットの入れ子構造</strong>を作ります。</p><p></p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20090729image2.gif" src="http://ua-labo.com/images/knockknock/20090729image2.gif" width="334" height="140" class="mt-image-none" style="" /></span><p></p>
<p>注意点は以下の通りです。</p>
<ul>
  <li>シーン用レイヤーセットのレイヤー名には接頭に必ず「SC_」をつけてください。</li>
  <li>シーンIDがレイヤーセットの名前で登録されますので、シーン用レイヤーセットの名前は一意のものにしてください。</li>
</ul>
<p>これでシーンの定義は完了です。    </p>
<h4>3) 各シーンに紐づくキャストとしてそのシーンレイヤーセット直下にレイヤーセットを作成</h4>
<p>次にシーンの登場人物ともいえるキャストを定義します。<strong>各シーンレイヤーセットの直下にシーン名と同一名でそのシーンに紐づくキャストとして、レイヤーセットを作成</strong>します。シーン遷移の際、<strong>行き先がそのシーンの場合だった時に表示</strong>されるキャストです。つまりProgression用に書き出されるクラスでは_onInitでAddChildされるキャストです。各シーンに紐ずくキャストは複数作成することができます。同一シーンレイヤーセット内で一意の名前を付けてください。シーン遷移の際、<strong>行き先がそのシーンもしくは、子シーン以下の場合に表示</strong>されるキャストです。</p><p></p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20090729image3.gif" src="http://ua-labo.com/images/knockknock/20090729image3.gif" width="334" height="278" class="mt-image-none" style="" /></span><p></p>
<p>ここでの注意点としては以下の通りです。</p>
<ul>
  <li>シーンレイヤーセット直下には必ず同一名のキャストレイヤーセットをひとつ作成してください。</li>
  <li>キャストレイヤーセットには必ず<strong>接頭に「MC_」</strong>をつけてください。</li>
</ul>
<p>キャストが定義されました。</p>
<h4>4) シーン遷移のためのキャストボタンとしてレイヤーセットを作成</h4>
<p>シーン遷移のためのキャストボタンを定義します。<strong>各シーンレイヤーセットの直下または、キャストレイヤーセットに飛び先シーン名と同一名でキャストボタンとして、レイヤーセットを作成</strong>します。キャストボタンレイヤーセット名がそのキャストボタンのIDとなります。レイヤー名にそれぞれ<strong>「over」「out」を設定するとロールオーバー、ロールアウトのアニメーションが設定</strong>されます。</p><p></p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20090729image5.gif" src="http://ua-labo.com/images/knockknock/20090729image5.gif" width="519" height="643" class="mt-image-none" style="" /></span><p></p>
<p>ここでの注意点としては以下の通りです。</p>
<ul>
  <li>キャストボタンレイヤーセットには必ず<strong>接頭に「BT_」</strong>をつけてください。</li>
</ul>
<h4>5) キャストに静的配置するMovieClipとしてレイヤーを作成</h4>
<p>キャスト、キャストボタンの表示要素を定義します。<strong>キャストレイヤーセットまたは、キャストレイヤーボタン直下に静的配置するMovieClipレイヤーを作成</strong>してください。またキャストにキャストを入れ子にすることもできます。その際はキャストレイヤーセット直下にキャストレイヤーセットを作成してください。</p><p></p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20090729image4.gif" src="http://ua-labo.com/images/knockknock/20090729image4.gif" width="334" height="1106" class="mt-image-none" style="" /></span><p></p>
<p>ここでの注意点は以下の通りです。</p>
<ul>
  <li>親のキャストと同一名は避けてください。</li>
  <li>MovieClipレイヤーはシーンの直下ではなく必ずキャストレイヤーセットの直下に配置してください。</li>
</ul>
<p>最後に1レイヤーセットが1シーンおよび1シーン、1レイヤーが1MovieClipとなりますので、それ以外のレイヤー（ガイドやマスクなども含む）は削除、および統合してください。<br />
  <br />
  例）<br />
SC_index<br />
--MC_index<br />
----image<br />
 --MC_navigation<br />
----BT_content0<br />
------over<br />
------out<br />
  ----BT_content1<br />
  ------over<br />
------out<br />
--SC_content0 <br />
  ----MC_content0 <br />
  --------image<br />
  ----MC_item<br />
  --------image<br />
  --SC_content1<br />
  ----MC_content1<br />
  --------image<br />
  ----MC_item<br />
  --------image<br />
  --MC_bg<br />
  ----image  <br />
  <br />
これで自動化のためのPhotoShopレイヤー整理は完了です。</p>
<p><a href="#top">戻る</a></p>
<hr>
<h3><a name="step2" id="step2"></a>ステップ2：PhotoShop自動化用JavaScript実行</h3>
<p>ステップ1で整理したPhotoShopを開いた状態で、PhotoShopバッチ処理用に作成したJavaScriptを実行しします。バッチ処理でPNGデータ、クラスファイル、レイアウト情報テキストを書き出します。PhotoShopメニューの<strong>ファイル＞スクリプト＞参照で「基本部分オーサリング自動化_Progression用.jsx」を選択</strong>、実行してください。ちなみに「C:\Program Files\Adobe\Adobe Photoshop CS4\Presets\Scripts」にjsxファイルを置いておくとスクリプトメニューに登録され、直接実行することもできます。「オーサリング自動化 Progression用」ダイアログが開きます。</p>
<ol>
  <li>PNGファイルを書き出す　：　<strong>materialsディレクトリが作成され、PSDレイヤーごとにPNGファイルを書き出します。</strong></li>
  <li>layout.txtを書き出す　：　materialsディレクトリ内に<strong>レイアウト情報を出力したlayout.txtファイルが書き出されます。</strong></li>
  <li>ActionScriptファイルを書き出す　：　<strong>classesディレクトリが作成され、Progression用のクラスファイルが書き出されます。</strong></li>
  <li>プロジェクト名　：　classesディレクトリ内にプロジェクトでパッケージを作成します。半角英数のみ使用可能です。</li>
  <li>著者　：　書き出されたクラスに@author情報を記述します。</li>
</ol>
<p></p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20090729image6.jpg" src="http://ua-labo.com/images/knockknock/20090729image6.jpg" width="406" height="382" class="mt-image-none" style="" /></span><p></p>
<p>PSDと同一階層にPSDと同一名のディレクトリを作成し、その中にmaterialsディレクトリ（PNGファイルとレイアウト情報テキストファイル）とclassesディレクトリ（クラスファイル）を作成します。</p>
<p><a href="#top">戻る</a></p>
<hr>
<h3><a name="step3" id="step3"></a>ステップ3：Flash自動化用JSFL実行</h3>
<p>PhotoShopで書き出したデータをもとにFlashの自動化用JSFLでオーサリングを自動化します。<br />
まずは以下のファイルをC:\Documents and Settings\ユーザー名\Local Settings\Application Data\Adobe\Flash CS4\ja\Configuration\Commandsに配置します。</p>
<ul>
  <li>基本部分オーサリング自動化_Progression用.jsfl</li>
  <li>基本部分オーサリング自動化_Progression用.xml</li>
</ul>
<p>Flashを起動して元となるflaファイルを新規作成し、保存します。<br />
Flashメニューの<strong>コマンド＞基本部分オーサリング自動化_Progression用を選択</strong>、実行します。<br />
「基本部分オーサリング自動化」ダイアログが開きます。</p>
<ol>
  <li>layout.as　：　PhotoShopで書き出した<strong>レイアウト情報テキストファイルをコピー&amp;ペースト</strong>します。</li>
  <li>プロジェクト名　：　PhotoShop自動化時にダイアログで入力したプロジェクト名と同一のものを入力します。</li>
  <li>リンケージ　：　MovieClipにクラスファイルのリンゲージが追加されます。<strong>追加するを選んでください。</strong><br />
    追加しない<br />
    追加する</li>
  <li>ActionScriptレイヤー　：　各MovieClipの一番上のレイヤーにActionScriptレイヤーが作成されます。<br />
    追加しない<br />
    追加する</li>
  <li>ActionScriptレイヤー名　：　ActionScriptレイヤー＞追加するを選んだ時のレイヤー名</li>
</ol>
<p></p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20090729image8.jpg" src="http://ua-labo.com/images/knockknock/20090729image8.jpg" width="468" height="336" class="mt-image-none" style="" /></span><p></p>
<p>「OK」ボタンで「<strong>layout.textを選択してください</strong>」ダイアログが開きますので、layout.textを選択してください。書き出したファイルとの位置関係を把握させるために選択が必要となります。<br />
</p>
<p></p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20090729image10.jpg" src="http://ua-labo.com/images/knockknock/20090729image10.jpg" width="656" height="391" class="mt-image-none" style="" /></span><p></p><p>選択後、自動化処理が開始されます。アイテム数によってはしばらく処理に時間がかかりますが、処理が完了するまでお待ちください。</p>
<p><a href="#top">戻る</a></p>
<hr>
<h3><a name="step4" id="step4"></a>ステップ4：その他設定</h3>
<p>自動化処理完了後、ステージサイズを調整し、ドキュメントクラスを設定します。ドキュメントクラスはPhotoShopから書き出した<strong>classes/proj/プロジェクト名/display/インデックスシーン名/インデックスシーン名.as</strong>を指定してください。記入例としては「proj.プロジェクト名.display.インデックスシーン名.インデックスシーン名」になります。次に「<strong>パブリッシュ設定</strong>」ダイアログを開いてを行います。<strong>「リソースパス」をPhotoShopより自動で書き出されたclassesに設定</strong>します。ここで重要なのですが「ステージのインスタンスを自動宣言」のチェックを外してください。基本的に静的配置されたオブジェクトはクラス上に自動ですべて宣言されます。</p>
<p></p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20090729image9.jpg" src="http://ua-labo.com/images/knockknock/20090729image9.jpg" width="524" height="612" class="mt-image-none" style="" /></span><p></p>
<p><a href="#top">戻る</a></p>
<hr>
<h3><a name="step5" id="step5"></a>ステップ5：パプリッシュ</h3>
<p>設定が完了したらパブリッシュですが、パブリッシュ前に、<strong>Progressionライブラリをclasses以下に配置</strong>してください。今回自動で書き出したクラスはProgressionを使用していますので、Progressionライブラリがないとエラーを起こしてしまいます。パブリッシュしてシーン遷移が問題なく行われていれば完了です。</p><p></p>
<p><a href="#top">戻る</a></p>
<hr>
<p>以上がProgressionを使用したPhotoShop書き出しと Flashオーサリングの自動化の流れです。Progressionのコンポーネントベースで開発をすればもちろんスクリプトを記述する必要はありませんが、クラスベースで開発した場合そうはいきません。しかし実際はProgressionはクラスベースの開発に利用されるケースがほとんどです。</p><p>今回はProgressionのクラスベースの開発を自動化しました。もちろんこれでサイトが完成するというわけではありません。トランジションや各アニメーションの調整をする必要はありますが、それまでの工数を大幅に削減することができるのです。</p><p>
是非ご利用いただければと思います。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000039</link>
<pubDate>Tue, 13 Oct 2009 14:32:19 +0900</pubDate>
</item>

<item>
<title>クラス名の混同について</title>
<category>ACTIONSCRIPT</category>
<description><![CDATA[<p>最近書き込みが少なくなっていますが、<br />なんとかがんばります。</p>
<p><br />今回はクラス名の混同について、引っかかったので<br />メモ。</p>
<p>皆さんご存知のように、表示オブジェクトの中でSpriteクラスというものが<br />ありますが、こちらはflash.display.Spriteというのが<br />正式のクラス名です。<br />import宣言によって、短縮名で記述できるようになっています。</p>
<p>Spriteですが、デフォルトではmouseEnabledとmouseChildrenがtrueで<br />あるがゆえに、マウス操作に影響しないものの場合、<br />わざわざmouseEnabledとmouseChildrenをfalseにしないといけません。<br />そこで私は<br />jp.co.uniteair.display.Spriteというクラスを<br />flash.display.Spriteのサブクラスとして作成しました。</p>
<p><pre class="actionscript" name="code">package jp.co.uniteair.display{
	public class Sprite extends flash.display.Sprite{
		public function Sprite() {
			this.mouseChildren = false;
			this.mouseEnabled = false;
		}	
	}
}
</pre>
<p></p>
<p>単なる四角とか点とかのムービークリップはjp.co.uniteair.display.Sprite<br />を基本クラスに指定することによって、<br />mouseEnabledとmouseChildrenをfalseにすることを省略できました。</p>
<p>そのまま平穏な日々が続いたのですが、<br />ちょっとややこしい事態がが発生しました。</p>
<p>下記のような場合、通常だったら</p>
<p><pre class="actionscript" name="code">package {
	import flash.display.*;
	public class Hoge {
		public function Hoge() {
			var mc:MovieClip = new MovieClip();
			var sp:Sprite = mc as Sprite;
			trace(sp); 
		}	
	}
}</pre>
<p></p>
<p>１フレーム目</p>
<p><pre class="actionscript" name="code">var hoge:Hoge = new Hoge();
</pre>
<p></p>
<p>結果はこうなりますね。</p>
<p><pre class="actionscript" name="code">[object MovieClip]
</pre>
<p></p>
<p>flash.display.MovieClipはflash.display.Spriteの<br />サブクラスなので、そのまま評価されるからです。</p>
<p><br />ところが、下記の場合は、</p>
<p><pre class="actionscript" name="code">package jp.co.uniteair.display{
	import flash.display.*;
	public class Hoge {
		public function Hoge() {
			var mc:MovieClip = new MovieClip();
			var sp:Sprite = mc as Sprite;
			trace(sp); 
		}	
	}
}</pre>
<p></p>
<p>１フレーム目</p>
<p><pre class="actionscript" name="code">import jp.co.uniteair.display.Hoge;
var hoge:Hoge = new Hoge();
</pre>
<p></p>
<p>トレースの結果、下にようになってしまいます。</p>
<p><pre class="actionscript" name="code">null
</pre>
<p></p>
<p>これだと何がおこっているか、よく分からないので、</p>
<p><pre class="actionscript" name="code">package jp.co.uniteair.display{
	import flash.display.*;
	public class Hoge {
		public function Hoge() {
			var mc:MovieClip = new MovieClip();
			var sp:Sprite = Sprite(mc);
			trace(sp); 
		}	
	}
}</pre>
<p></p>
<p>１フレーム目</p>
<p><pre class="actionscript" name="code">import jp.co.uniteair.display.Hoge;
var hoge:Hoge = new Hoge();
</pre>
<p></p>
<p><pre class="actionscript" name="code">TypeError: Error #1034: 強制型変換に失敗しました。flash.display::MovieClip@1e63c941 を jp.co.uniteair.display.Sprite に変換できません。
</pre>
<p></p>
<p><br />上記で分かることは<br />import flash.display.Spriteをしているにもかかわらず、<br />flash.display.Spriteよりjp.co.uniteair.display.Spriteを優先しているということです。<br />flash.display.MovieClipはjp.co.uniteair.display.Spriteのサブクラスではありませんので<br />エラーになります。</p>
<p>これはHogeがjp.co.uniteair.display.Hogeだからです。<br />（前の例だと正式クラス名もHogeでした。）</p>
<p><strong>クラス名が競合した場合は、同パッケージが最優先</strong>だということがわかりました。<br />あまりクラス名は同じにしないほうがいいですね、と強く反省しました。<br />とりわけ、頻繁に使用するであろうビルドインクラスとは同じにしないほうがいいでしょう。</p>
<p>なので前述エセSpriteクラスはPlainSpriteと名を変えました...</p>]]></description>
<link>http://www.ua-labo.com/#/pid000037</link>
<pubDate>Wed, 05 Aug 2009 00:08:18 +0900</pubDate>
</item>

<item>
<title>ネットワークアプリ＋Flashに挑戦</title>
<category>ACTIONSCRIPT,OTHERS</category>
<description><![CDATA[<p>Webの仕事をしているのに実はネットワークには<br />疎かった...。こういう人ってかなりいるとは<br />思います。<br />パケット、プロトコル、レイヤー、TCP/IP...<br />聞いたことがあるけど、そらで詳しく説明できる人は<br />フロントの制作ではあまりいないのかもしれません。<br />（自分は都度調べてすぐ忘れがちです...）</p>
<p><br />ちょっと前ですが仕事上、Flashでサーバー上の<br />JavaアプリとSocket通信をしないといけない<br />案件をすることになりました。<br />未知の世界なので不安2割、楽しみ8割で挑みました。<br />Flash側としてはSocketクラスを作って、<br />指定のイベントをaddEventListerして...と<br />URLLoaderみたいなノリで意外にカンタンに<br />できます。ただ、その案件はSocket通信＋SSLだったので<br />一筋縄ではいきませんでしたが。<br />（でも、パケット盗聴、なりすましとか考えると、実務レベルでは<br />SSLにしないといけないんだろうなと実感）<br />さらにセキュリティーポリシーが追い討ちをかけて<br />私と、連携先のSEさんを苦しめました...</p>
<p><a href="http://www.adobe.com/jp/devnet/flashplayer/articles/socket_policy_files.html" target="_blank">→ソケットポリシー</a></p>
<p><br />でもパケットキャプチャーソフトをデバッグ用に使って<br />何とかつなぐことができました！<br />パケットキャプチャーは通信ごとのデータを<br />モニタリングしてくれます。暗号化なしのパスワードとか<br />何でも分かってしまいます。<br />暗号化って必要なんだなと肌で実感してしまいます。</p>
<p><a href="http://www.vector.co.jp/soft/winnt/net/se453408.html">ぱけ見え【Protocol_EYE】 フリー版</a></p>
<p>下図のように通信ごとにパケットが丸見えです。</p>
<p><a href="javascript:window.open('http://ua-labo.com/_iwata/090715/','_blank','width=917, height=666, menubar=no, toolbar=no, scrollbars=no');void(0);" border="0"><img src="http://ua-labo.com/_iwata/090715/cap1_s.jpg" /><br />クリックで拡大します。</a></p>
<p><br />その案件はある事情がありまして、最後までお手伝い<br />できなかったのですが、それを契機に自分で一回、<br />ネットアプリを構築してFlashとつなげてみようと思いました。<br />Java経験がありましたし、自宅の本棚を探ると、<br />Javaネットワークプログラミングの本が！</p>
<p>平成15年とかなり昔の本ですが、<br />これで作れる！と思わせましたね。当時と今とでは<br />私の中でのオブジェクト指向の理解がかなり違うので<br />結構イケルと思いました。</p>
<p><a href="http://www.amazon.co.jp/Java%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E5%B9%B8%E6%9D%91-%E5%89%9B%E6%A8%B9/dp/479800667X/ref=sr_1_32?ie=UTF8&amp;s=books&amp;qid=1247586539&amp;sr=8-32" target="_blank">・Javaネットワークプログラミング</a></p>
<p><a href="http://www.amazon.co.jp/Java%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF-%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%A0%E5%AE%8C%E5%85%A8%E5%88%B6%E8%A6%87-%E6%A8%99%E6%BA%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%82%BA%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA-%E7%B1%B3%E5%B7%9D-%E8%8B%B1%E6%A8%B9/dp/4774118389/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1247586594&amp;sr=1-1" target="_blank">・Javaネットワーク&amp;ストリーム完全制覇</a></p>
<p>※前述しましたが、両方ともJavaの本です。</p>
<p>&nbsp;</p>
<p><br />もっと新しい本買ったほうがいいかもしれないと思いましたが<br />とりあえずこれを使って、ネットアプリを作ろうと思います。<br />負荷とかはとりあえず考えないで。<br />最終的にはLinuxに入れられるように。</p>
<p><br />まず最初に前述のパケットキャプチャーソフトを使おう！と思い、<br />早速自宅のVistaにインストールしました。</p>
<p><br />......が<br />ぜんぜんトレースされない！会社ではできたのに！</p>
<p>別の有名な海外のソフトを調べてDLしてみました。</p>
<p>・Wireshark<br /><a href="http://jp.downpanda.com/wireshark-19423.html">http://jp.downpanda.com/wireshark-19423.html</a></p>
<p>でも駄目でした。</p>
<p><br />詳しく調べるとVistaって権限とか厳しいので<br />管理者権限で起動しないといけないのです。<br />下図のように、わざわざ右クリックして起動しないといけないようです。</p>
<p><img src="http://ua-labo.com/_iwata/090715/cap2.jpg" /> 
<p>
<p>管理者権限で起動し、適当なページを閲覧したら、<br />どんどんキャプチャーされていくことが確認できました。<br />（しかも上記の２つのソフト両方です！）</p>
<p><br />前述セキュリティーポリシーによって<br />FlashPlayerがSocketインスタンス作成しconnectしたら<br />"&lt;policy-file-request/&gt;"という文字列を<br />接続先のport843に強制的に投げます。<br />（パブリッシュプレビューでは投げません）</p>
<p>その文字列をキャプチャーできるかなと思い、<br />早速JavaでFlashPlayerからport843で受けるプログラムを<br />書いて、プロンプトで実行しておきます。<br />そして、ブラウザ上でSocketをconnectするFlashを実行。</p>
<p>......でも、出てきません。<br />同ＩＰ同士のパケットはキャプチャーできないみたいです。<br />理解度が低いせいかもしれません。<br />２つのソフトで行いましたがぜんぜん出てこないですね。<br />何かいい方法があるのかな。さすがに２，３時間では<br />見つからなかったか...。やっぱりテキストフィールド<br />つくってトレースするか...。</p>
<p><br />進展がありましたら、<br />さらにレビューさせていただきます。</p>
<p><br />&nbsp;</p>]]></description>
<link>http://www.ua-labo.com/#/pid000036</link>
<pubDate>Wed, 15 Jul 2009 01:20:27 +0900</pubDate>
</item>

<item>
<title>第3回 Flash座談会 ～ASデザインパターン考証 MVC編～</title>
<category>ALGORITHM</category>
<description><![CDATA[こんにちは、続けてchikathreesixです。<br /><br />ずいぶん前に行われた座談会の内容です...<br />もう少し早くエントリ書きます、、はい。<br /><br />今沢山のAPIとやりとりを行う比較的アプリケーションに近いFlash案件を担当しているのですが、そういう時ってデータをどこで保持しておくかなど非常に頭を悩ませます。<br />そこで今回はO'REILLYから出版されている<a href="http://www.amazon.co.jp/exec/obidos/ASIN/0596528469/borealkiss-22/" target="_blank">「ActionScript3.0 Design Patterns」</a>から、前述の案件にも利用したMVCパターンについて発表させてもらいました。<br /><br /><a href="http://ja.wikipedia.org/wiki/Model_View_Controller" target="_blank">MVC</a>はご存じの方も多いかと思いますが、Model,View,Controllerの略です。<br />クラスをそれぞれに分けて設計します。<br />３つの特徴を簡単にまとめます。<br /><br /><b>Model</b><br />アプリケーションのデータとロジックを持ち、状態を管理します。<br />状態が変化したらそれを通知します。<br /><br /><b>View</b><br />表示要素です。ユーザーはViewを通してアプリケーションを操作します。<br /><br /><b>Controller</b><br />ModelとViewの橋渡しを行います。表示要素は持ちません。<br /><br /><br />三つのクラスの関係と、インタラクションがあったときの処理順序は以下のようになっています。（本の図を日本語にしただけです。。）<br />
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="zu1.gif" src="http://ua-labo.com/images/chikathreesix/zu1.gif" class="mt-image-none" style="" width="420" height="260" /></span>

<br /><br /><br />では実際にどう実装するのか。<br />簡単な例で解説していきます。<br /><br />
<b>Model</b><br />
値を格納するメソッド、値を取りだすメソッドと、updateというメソッドを用意します。
これらのインターフェースを実装する形が理想かと思われます。<br />
updateではCHANGEのイベントをディスパッチします。ここが結構ポイントです。
<br /><br />
<i>Model.as</i>
<pre class="actionscript" name="code">package 
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	
	public class Model extends EventDispatcher implements IModel 
	{
		protected var _key:int;
		
		public function setKey(key:int):void {
			_key = key;
			this.update();
		}
		
		public function getKey():int {
			return _key;
		}
		
		protected function update():void {
			dispatchEvent(new Event(Event.CHANGE));
		}
	}	
}
</pre>
<br /><br />
<b>Controller</b><br />
ViewからModelに値を書き込むメソッドを用意します。これもインターフェースを作っておくとよいようです。<br /><br />
<i>Controller.as</i>
<pre class="actionscript" name="code">package 
{
	import flash.events.KeyboardEvent;
	
	public class Controller implements IController 
	{
		private var model:Object;
		
		public function Controller(aModel:Object) {
			this.model = aModel;
		}
		
		public function keyPressHandler(event:KeyboardEvent):void {
			(model as IModel).setKey(event.keyCode);
		}
	}
}
</pre><br /><br />

<b>View</b><br />まず、表示要素のクラスComponentViewとそれを複数内包するCompositeViewというクラスを作成し、このいずれかを継承させます。<br />
今回の例ではComponentViewを継承したViewを使用しますが、Viewが複数ある場合、Viewを包括するViewはCompositeViewを継承させます。<br /><br />
<i>ComponentView.as</i><br />
<pre class="actionscript" name="code">package
{
	import flash.display.Sprite;
	import flash.errors.IllegalOperationError;
	import flash.events.Event;

	/**
	* Viewの基本クラス
	*/
	public class ComponentView extends Sprite
	{
		protected var model:Object;
		protected var controller:Object;
		
		public function ComponentView(aModel:Object = null, aController:Object = null) 
		{
			this.model = aModel;
			this.controller = aController;
		}

		public function setModelController(aModel:Object = null, aController:Object = null):void
		{
			this.model = aModel;
			this.controller = aController;
		}

		public function add(c:ComponentView):void
		{
			throw new IllegalOperationError("add operation not supported");
		}
		
		public function remove(c:ComponentView):void
		{
			throw new IllegalOperationError("remove operation not supported");
		}
		
		public function getChild(n:int):ComponentView
		{
			throw new IllegalOperationError("getChild operation not supported");
			return null;
		}
		
		//ABSTRACT Method
		public function update(e:Event = null):void{}
	}
}
</pre><br />
<i>CompositeView.as</i><br />
<pre class="actionscript" name="code">package
{
	import com.chikathreesix.mvc.ComponentView;
	import flash.events.Event;
	
	/**
	* 複数のViewを持つView
	*/
	public class CompositeView extends ComponentView
	{
		private var aChildren:Array;
		
		public function CompositeView(aModel:Object = null, aController:Object = null) 
		{
			super(aModel, aController);
			this.aChildren = new Array();
		}
		
		override public function setModelController(aModel:Object = null, aController:Object = null):void 
		{
			super.setModelController(aModel, aController);
			for each(var c:ComponentView in aChildren)
			{
				c.setModelController(aModel, aController);
			}
		}
		
		override public function add(c:ComponentView):void 
		{
			aChildren.push(c);
		}
	
		override public function remove(c:ComponentView):void 
		{
			super.remove(c);
			for (var i = 0; i &lt; aChildren.length; i++)
			{
				if (aChildren[i] == c)
				{
					aChildren.splice(i, 1);
				}
			}
		}
		
		override public function update(e:Event = null):void 
		{
			for each(var c:ComponentView in aChildren)
			{
				c.update(e);
			}
		}
	}
}
</pre>
<br />
setModelControllerというのは自前です。静的配置するものがほとんどだったので、モデルとコントローラーを入れるために作りました。<br />
<br />
<i>View.as</i>
<pre class="actionscript" name="code">package 
{
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	
	public class View extends ComponentView
	{
		public function ComponentView(aModel:Object = null, aController:Object = null) 
		{
			super(aModel, aController);
			this.addEventListener(KeyboardEvent.KEY_DOWN, _onKeyPress);
		}
		
		private function _onKeyPress(event:KeyboardEvent):void {
			(controller as IController).setKey(event);
		}
		
		
		override public function update(e:Event = null):void 
		{
			super.update(e);
			trace((model as IModel).getKey());
		}
	}
}
</pre>
<br /><br />

<b>ドキュメントクラス</b><br />
Model、View、Controllerを生成し、紐付けます。ModelのCHANGEイベントをViewが監視することで、Modelの値が変化した時にそれを即座に反映することができます。<br /><br />

<i>DocumentClass.as</i>
<pre class="actionscript" name="code">package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	
	public class DocumentClass extends Sprite 
	{
		public function DocumentClass() {
			var model:IModel = new Model();
			var controller:IController = new Controller(model);
			
			var view:View = new View(model, controller);
			model.addEventListener(Event.CHANGE, view.update);
		}
	}
}
</pre>
<br /><br />
クラスの量が膨大になる場合、Model、View、Controllerをどう管理するか、本には載っていませんでした。<br />いろいろ設計手法はあると思いますが、僕はCoreModelというものをつくり、ModelがCoreModelのイベントを監視することで、すべてのデータを一元管理し、変更した場合、すべてのModelに通達するように設計しました。<br />
これが最適解ではないかもしれません。もしいい方法があったら教えていただきたいです。]]></description>
<link>http://www.ua-labo.com/#/pid000032</link>
<pubDate>Thu, 02 Jul 2009 13:00:00 +0900</pubDate>
</item>

<item>
<title>Flash DeveloperのためのSilverlight＋C# (1)</title>
<category>ACTIONSCRIPT,SILVERLIGHT</category>
<description><![CDATA[<p><strong>MovieClip（表示オブジェクト)の対応</strong></p>
<p>SilverlightをやるためにC#と奮闘中です。<br />Silverlightをやってみたいが、C#のAPIを<br />調べるのがメンドクサイという方のために<br />これからメモ代わりに掲載してゆきたいと思います。<br />まだまだ始めたばかりで間違いもあるかもしれませんが<br />よろしくおねがいします。</p>
<p>Silverlight向け .NET Frameworkライブラリ<br /><a href="http://msdn.microsoft.com/ja-jp/library/cc838194(VS.95).aspx" target="sl">http://msdn.microsoft.com/ja-jp/library/cc838194(VS.95).aspx</a></p>
<p>ActionScriptでもっとも重要なクラスとは<br />と聞かれると、ほとんどの人がMovieClipクラスと<br />答えると思います。(AS3では「表示オブジェクト」<br />と答える人もいると思いますが...)</p>
<p>Silverlightでは表示オブジェクトがどうなっているのか？</p>
<p>FlashではMovieClipはタイムライン上で配置できる<br />静的配置とコード上でインスタンスを生成する<br />動的配置があります。</p>
<p>最初のドキュメント生成は下記を参照ください。<br /><a href="http://ua-labo.com/#/pid000026" target="_top">http://ua-labo.com/#/pid000026</a></p>
<p>上記の方法でプロジェクトを<br />生成すると<br />App.xaml・App.xaml.csと<br />Page.xaml・Page.xaml.csが自動生成されます。</p>
<p>App.xamlおよびApp.xaml.csはまだ深く突っ込んでいませんが、Applicationというクラスの<br />サブクラスですので、Silverlightアプリを<br />司るクラスのようです。</p>
<p>App.xaml.cs 
<p><pre class="csharp" name="code">using System.Windows;
using System;

namespace Sample0906
{
	public partial class App : Application 
	{
		public App() 
		{
			this.Startup += this.OnStartup;
			this.Exit += this.OnExit;
			this.UnhandledException += this.Application_UnhandledException;

			InitializeComponent();
		}

		private void OnStartup(object sender, StartupEventArgs e) 
		{
			// メイン コントロールをここに読み込みます
			this.RootVisual = new Page();
		}

		private void OnExit(object sender, EventArgs e) 
		{
		}

		private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) 
		{
			// デバッガの範囲外でアプリケーションが実行されている場合、ブラウザの
			//例外機能を使用して例外が報告されます。IE では、この例外はステータス バーの
			//黄色の警告アイコンで示されます。Firefox では、スクリプト エラーが表示されます。
			if (!System.Diagnostics.Debugger.IsAttached)
			{
				// メモ: これにより、例外がスローされたが処理されなかった場合でも、
				//アプリケーションは実行を継続できます。
				// 実稼働アプリケーションでは、このエラー処理を、他の機能 (Web サイトへエラーを報告し、
				//アプリケーションを停止するような機能) に置き換える必要があります。
				e.Handled = true;
				Deployment.Current.Dispatcher.BeginInvoke(delegate { ReportErrorToDOM(e); });
			}
		}

		private void ReportErrorToDOM(ApplicationUnhandledExceptionEventArgs e)
		{
			try
			{
				string errorMsg = e.ExceptionObject.Message + @"\n" + e.ExceptionObject.StackTrace;
				errorMsg = errorMsg.Replace("\"", "\\\"").Replace("\r\n", @"\n");

				System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(\"Unhandled Error in Silverlight 2 Application " + errorMsg + "\");");
			}
			catch (Exception)
			{
			}
		}
	}
}
</pre>
<p>App.xaml</p><pre class="xml" name="code"><application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x:class="Sample0906.App" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
	<APPLICATION.RESOURCES>
		<!-- Resources scoped at the Application level should be defined here. -->
	</APPLICATION.RESOURCES>
</application>
</pre>
<p>Page.xaml.csがFlashCS3でいうドキュメントクラスです。</p>
<p>Page.xaml.csつまりPageクラス</p><pre class="csharp" name="code">using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace Sample0906
{
	public partial class Page : UserControl
	{
		public Page()
		{
			// 変数を初期化するときに必要となります
			InitializeComponent();
		}
	}
}
</pre><br />
<p>Page.xaml</p><pre class="xml" name="code"><usercontrol width="640" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x:class="Sample0906.Page" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" height="480">
	<canvas background="White" x:name="LayoutRoot2" />
</usercontrol>
</pre>
<p>Page.xamlがタイムラインみたいなもので、下記のようにApp.xaml.cs内でルート指定してます。（OnStartUpはアプリ開始のイベントみたいなものです。） </p><pre class="csharp" name="code">private void OnStartup(object sender, StartupEventArgs e) {
	// メイン コントロールをここに読み込みます
	this.RootVisual = new Page();
}
</pre><br />Page.xaml.csはUserControlというクラスのサブクラスなのですが<br />UserControlクラスがMovieClipにあたります。<br />Page.xamlのルートノードがUserControlになるからです。<br />（ApplicationとUserControl以外あるのかまだ分かってません）<br />ただ、Flashと違い、子表示オブジェクトが1つしか<br />持てません。ここがFlashと違うところです。<br />UserControl.Contentプロパティ（DisplayObject→UIElement)<br />でムービークリップのルート上に配置する表示オブジェクトを<br />設定可能です。XAML内でデフォルトでGridタグが<br />書かれています（上記Page.xamlではCanvasタグ<br />にしてます。）が、これは表示オブジェクトの１つです。<br />これは下記と同じですね。 
<p></p>
<p><br />静的配置→XAMLで設定<br />タイムライン的なもの→XAMLで設定<br />動的配置→newで作成</p>
<p>GridとCanvasですが、GridはFlashにはありません。<br />CanvasがSpriteみたいなものです。</p>
<p>つまりこういう風に書きます。</p>
<p><strong>■子表示オブジェクトの追加</strong></p>
<p>ActionScript</p><pre class="actionscript" name="code">var sp:Sprite = new Sprite();
var sp2:Sprite = new Sprite();
sp.addChild(sp2);
sp.removeChild(sp2);
</pre>
<p>&nbsp;</p>
<p>C#</p><pre class="csharp" name="code">Canvas canvas = new Canvas();
Canvas canvas2 = new Canvas();
canvas.Children.Add(canvas2);
canvas.Children.Remove(canvas2);

</pre>
<p>先ほども述べましたがUserControlには子表示オブジェクトが<br />1つしか設定できないため、私はUserControl.ContentにCanvasを<br />設定し、そこにどんどん子表示オブジェクトを追加しています。<br /></p>
<p>&nbsp;</p>
<p><strong>■座標の設定</strong></p>
<p>ActionScript</p><pre class="actionscript" name="code">sp2.x = 100;
sp2.y = 200;
</pre>
<p>C#</p><pre class="csharp" name="code">Canvas.setLeft(canvas2,100);
Canvas.setTop(canvas2,200);
</pre>
<p>※staticです。</p>
<p><strong>■座標の参照</strong></p>
<p>ActionScript</p><pre class="actionscript" name="code">var x:Number = sp2.x;
var y:Number = sp2.y;
</pre>
<p>C#</p><pre class="csharp" name="code">double x =&nbsp; Canvas.getLeft(canvas2);
double y =&nbsp; Canvas.getTop(canvas2);
</pre>
<p>&nbsp;</p>
<p><strong>■アルファ</strong></p>
<p>ActionScript</p><pre class="actionscript" name="code">sp2.alpha = 0.5;
</pre>
<p>C#</p><pre class="csharp" name="code">canvas2.Opacity = 0.5;
</pre>
<p>&nbsp;</p>
<p><strong>■mouseEnabledについて</strong></p>
<p>ActionScript</p><pre class="actionscript" name="code">sp.mouseEnabled = true;
</pre>
<p>C#</p><pre class="csharp" name="code">canvas.IsHitTestVisible = true;
</pre>
<p>（UIElementクラスのプロパティのようです）<br />※デフォルトではtrueです。</p>
<p><br />分かってきたらこの部分は更新してゆきます。<br /></p>
<p>&nbsp;</p><p>&nbsp;</p>
<p><strong>■今回のクラス</strong></p>
<ul>
<li><a href="http://msdn.microsoft.com/ja-jp/library/system.windows.controls.canvas(VS.95).aspx" target="sl">Canvasクラス</a></li>
<li><a href="http://msdn.microsoft.com/ja-jp/library/system.windows.controls.usercontrol(VS.95).aspx" target="sl">UserControlクラス</a></li></ul>]]></description>
<link>http://www.ua-labo.com/#/pid000034</link>
<pubDate>Mon, 15 Jun 2009 22:45:01 +0900</pubDate>
</item>

<item>
<title>ブラウザ100％表示用コンポーネント</title>
<category>ACTIONSCRIPT,FLASH</category>
<description><![CDATA[<p>会社でデザイナー向けに<a href="http://progression.jp/" target="_blank">Progression</a>のコンポーネントの講義を開催していますが、<br />
ブラウザ内100%表示の際にウィンドウをリサイズしても下にくっついているフッターを作りたいと要望されました。</p>
<p>確かに近頃のプロモーションFlashは100%表示が多いです。<br />
ということで、要望に応えるために初めてコンポーネントを作ってみました。</p>
<p>→<a href="http://ua-labo.com/images/yanbou/reSizerPx.zip">reSizerPx</a></p><p><br /></p><p><br /></p>
<strong>パラメータ</strong>
<p><img alt="パラメータパネル" src="http://ua-labo.com/images/yanbou/2009061001.gif" width="423" height="162" class="mt-image-none" style="" /></p>
<p>・Position<br />
　　どの位置を基準にするか（top left、top、top right、left、center、right、bottom left、bottom、bottom right）</p>
<p>・Scale<br />
　　拡大縮小するか（No Scale：拡大縮小無なし、x 100%：横100%拡大、y 100%：縦100%拡大、Show All：stageいっぱいに拡大/縦横比率変更、Fit Short：短辺合わせで拡大/縦横比率維持、Fit Long：長辺合わせで拡大/縦横比率維持）</p>
<p>・xPos(px)<br />
　　基準からx方向へのずれ（ピクセル単位）</p>
<p>・yPos(px)<br />
　　基準からy方向へのずれ（ピクセル単位）</p><p><br /></p><p><br /></p>
<p>スクリプトは一行も書いていなくても、この<a href="http://ua-labo.com/images/yanbou/reSizerPx.swc">reSizerPx</a>と<br />
<a href="http://progression.jp/" target="_blank">Progression</a>のコンポーネントでここまでできます。</p>
<p>→<a href="http://ua-labo.com/images/yanbou/reSizerPxSample/index.html" target="_blank">サンプル</a></p>
<p>コンポーネントの制限はありますが<br />
アイデア次第で実案件こなせるかもしれないですね。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000035</link>
<pubDate>Wed, 10 Jun 2009 16:29:58 +0900</pubDate>
</item>

<item>
<title>AIRでSQLiteを使う　-アドレスブック-</title>
<category>ACTIONSCRIPT,AIR,FLASH</category>
<description><![CDATA[<p>AIRでSQLiteが使えるということでテストしてみた。<br />
ただテストするとつまらないのでデータベースを使ったアドレスブックを作った。</p>
<img alt="20090528_1.jpg" src="http://ua-labo.com/images/yanbou/20090528_1.jpg" width="408" height="416" class="mt-image-none" style="" />
<p>まずはデータベースとつないで、テーブル作成。<br />
テーブルの「flag」はデリート時に変更し表示上から削除するため。<br />
つまり後で復活できるようにしておく。</p>
<p>■データベースを作成するとき</p>
<pre name="code" class="actionscript">private var _connection:SQLConnection;
private var _sqlstmt:SQLStatement;

var dbfile:File = File.applicationDirectory.resolvePath("data.db");
this._connection = new SQLConnection();
this._connection.addEventListener(SQLEvent.OPEN, connectOpen);
this._connection.addEventListener(SQLErrorEvent.ERROR, viewError);
this._connection.open(dbfile);</pre>
<p>■テーブルを作成するとき</p>
<pre name="code" class="actionscript">this._sqlstmt = new SQLStatement();
this._sqlstmt.sqlConnection = this._connection;
this._sqlstmt.text = "CREATE TABLE IF NOT EXISTS data (no INTEGER PRIMARY KEY, name TEXT, address TEXT, tel TEXT, email TEXT, flag INTEGER)";
this._sqlstmt.addEventListener(SQLEvent.RESULT, viewComp);
this._sqlstmt.addEventListener(SQLErrorEvent.ERROR, viewError);
this._sqlstmt.execute();</pre>
<p>■追加するとき</p>
<pre name="code" class="actionscript">this._sqlstmt.text = "INSERT INTO data (no, name, address, tel, email, flag) VALUES (@no, @name, @address, @tel, @email, @flag)";
this._sqlstmt.parameters["@no"] = null;
this._sqlstmt.parameters["@name"] = this.uname.text;
this._sqlstmt.parameters["@address"] = this.address.text;
this._sqlstmt.parameters["@tel"] = this.tel.text;
this._sqlstmt.parameters["@email"] = this.email.text;
this._sqlstmt.parameters["@flag"] = 1;
this._sqlstmt.addEventListener(SQLEvent.RESULT, viewComp);
this._sqlstmt.addEventListener(SQLErrorEvent.ERROR, viewError);

this._sqlstmt.execute();</pre>
<p>■削除するとき<br />
※デリートではなく「flag」のアップデートで対応。</p>
<pre name="code" class="actionscript">this._sqlstmt.text = "UPDATE data SET flag = @flag WHERE no = @no";
this._sqlstmt.parameters["@no"] = dgData.no;
this._sqlstmt.parameters["@flag"] = 0;
this._sqlstmt.addEventListener(SQLEvent.RESULT, viewComp);
this._sqlstmt.addEventListener(SQLErrorEvent.ERROR, viewError);
this._sqlstmt.execute();</pre>
<p>■更新するとき</p>
<pre name="code" class="actionscript">this._sqlstmt.text = "UPDATE data SET name = @name, address = @address, tel = @tel, email = @email WHERE no = @no";
this._sqlstmt.parameters["@no"] = dgData.no;
this._sqlstmt.parameters["@name"] = dgData.name;
this._sqlstmt.parameters["@address"] = dgData.address;
this._sqlstmt.parameters["@tel"] = dgData.tel;
this._sqlstmt.parameters["@email"] = dgData.email;
this._sqlstmt.addEventListener(SQLEvent.RESULT, viewComp);
this._sqlstmt.addEventListener(SQLErrorEvent.ERROR, viewError);
this._sqlstmt.execute();</pre>
<p>■表示するとき<br />
※UIコンポーネントのデータグリッドを使用。<br />
データは「flag」が0でないもので、名前の順で取り出している。</p>
<pre name="code" class="actionscript">public var dg:DataGrid;

//データ取得
private function getParam(e:MouseEvent = null):void {
	this._sqlstmt = new SQLStatement();
	this._sqlstmt.sqlConnection = this._connection;
	this._sqlstmt.text = "SELECT * FROM data WHERE flag &gt; 0 ORDER BY name DESC";
	this._sqlstmt.addEventListener(SQLEvent.RESULT, getComp);
	this._sqlstmt.addEventListener(SQLErrorEvent.ERROR, viewError);
	this._sqlstmt.execute();
}
//データ表示
private function getComp(e:SQLEvent):void {
	var result:SQLResult = this._sqlstmt.getResult();
	var records:Array = result.data;
	this.dg.editable = true;
	this.dg.columns = ["name", "address", "tel", "email"];
	this.dg.columns[0].sortable = false;
	this.dg.columns[1].sortable = false;
	this.dg.columns[2].sortable = false;
	this.dg.columns[3].sortable = false;
	var dp:DataProvider = new DataProvider(records);
	this.dg.dataProvider = dp;
}</pre>
<p>AIRでSQLiteを使ってみて、簡単という印象だった。<br />
データベースの確認はFirefoxのアドオン
「<a href="https://addons.mozilla.org/ja/firefox/addon/5817" target="_blank">Sqlite Manager</a>」を使えばさらに簡単。<br />
できたアプリも公開。</p>
<script src="http://ua-labo.com/images/yanbou/swfobject1_5.js" type="text/javascript"></script>
<div id="flashcontent"></div>
<script src="http://ua-labo.com/images/yanbou/addressBookBadge.js" type="text/javascript"></script>]]></description>
<link>http://www.ua-labo.com/#/pid000033</link>
<pubDate>Thu, 28 May 2009 14:10:50 +0900</pubDate>
</item>

<item>
<title>第2回 Flash座談会 ～Progression 基本編～</title>
<category>OTHERS</category>
<description><![CDATA[こんにちは、chikathreesixです。<br />先日作者のniumさんにProgression次期バージョンの新機能などを話しに来ていただきました！<br />詳しくは伏せますが、次期バージョンもとにかく凄いものになりそうです！！<br /><br /><br />さて、遅くなってしまいましたが、Flash座談会第二回の内容をまとめます。<br />（行われたのは先週です。。遅くなってすみません。。。）<br /><br />僕も<a href="http://progression.jp/ja/showcase/#parismiki" target="_blank">先日公開した案件</a>で初めてProgressionデビューしたのですが、とにかく使いやすいことに驚きました。<br />今回の座談会ではクラスベースで開発するProgressionの基本的な部分を発表しました。<br />本当に初歩的な部分すぎてお恥ずかしいのですが、まとめたいと思います。<br /><br /><br /><br /><br /><b>１）シーンについて</b><br /><br />シーンはSceneObjectを継承して生成するのですが、これに４つのイベントハンドラメソッドがあります。<br />詳しくは<a href="http://progression.jp/ja/doc/tutorial/class/" target="_blank">Progressionのサイトにあるドキュメント</a>を見ていただければと思いますが、僕はなかなか理解できなかったので簡単にまとめます。<br /><br />・onInit<br />自分に到着したときに実行される。<br /><br />・onGoto<br />自分から出発したときに実行される。<br /><br />・onLoad<br />自分の下に行く時と自分に到着したときに実行される。<br /><br />・onUnload<br />自分の上に行く時と自分から出発した時に実行される。<br /><br /><br />つまり自分に到着するときは、onLoadとonInitが必ず実行され、<br />自分から出発するときは、onGotoとonUnloadが必ず実行されます。<br /><br /><a href="http://fladdict.net/blog/2008/11/progression_study1.html" target="_blank">fladdictさんのエントリ</a>が非常にわかりやすかったです。<br /><br /><br /><br /><br /><b>２）キャストについて</b><br /><br />シーンのイベントハンドラメソッド内でキャストをAddChildとかRemoveChildで出現させたり、退却させたりします。<br />その時に実行されるイベントハンドラメソッドが２つあります。<br /><br />・onCastAdded<br />キャストがAddChildクラスかAddChildAtによってaddChildされたときに実行される。<br /><br />・onCastRemoved<br />キャストがRemoveChildクラスかRemoveChildAtによってremoveChildされたときに実行される。<br /><br /><br />この中にDoTweenerとかを書けばシーン遷移時のキャストの出し入れが、順番に行われます。<br />ちなみに、CastButtonにはこれらのイベントハンドラメソッドはありません。<br /><br /><br /><br /><br /><b>３）カスタムコマンドについて</b><br /><br />Commandクラスを継承することで、上記のAddChildやDoTweenerと同じように使えるカスタムコマンドが作れます。<br />これも非常に簡単で、コマンドが実行されたときに行う処理を_execute()内に記述し、<br />中断されたときの処理を_interrupt()内に記述します。<br />処理が終わったタイミングでexecuteComplete()を実行すればよいだけです！<br />非常に簡単ですね。<br /><br /><br /><br />ものすごいざっとまとめてしまいましたが、結論としては慣れれば非常に使いやすく、なくてはならない存在になるフレームワークだということです。<br />Progressionデビューは遅くなってしまいましたが、これからどんどん使っていこうと思います。<br /><br /><br /> ]]></description>
<link>http://www.ua-labo.com/#/pid000031</link>
<pubDate>Tue, 19 May 2009 22:10:19 +0900</pubDate>
</item>

<item>
<title>Silverlightでピラミッド(トランプゲーム)</title>
<category>SILVERLIGHT</category>
<description><![CDATA[<p>連休中にSilverlightの簡易なゲームを作成する<br />という小さい目標があったのですが、<br />なんとか間に合いました。</p>
<p><br />どんなゲームにしようか迷いましたが、<br />既存のトランプゲームで、１人でできるものにしました。<br />(VSCOMやネット対戦は次回にしたいと思います。)<br />私は初めて知ったのですが、<a href="http://ja.wikipedia.org/wiki/%E3%83%94%E3%83%A9%E3%83%9F%E3%83%83%E3%83%89_(%E3%83%88%E3%83%A9%E3%83%B3%E3%83%97)" target="_blank">「ピラミッド」</a>という<br />ゲームにしました。<br />調べてみると簡単なロジックなので、余裕でいけるん<br />じゃないかと思ったので、結局プログラミングは最終日<br />の１日だけにしました。<br />でも、意外に言語や挙動の差異に戸惑ってしまって、<br />きわどかったです。</p>
<p>デザインも簡素でHELPもなく、フォントも埋め込まず...<br />と作りかけ感がかなりありますが、一応プレイ可能です。<br />バグがあったらゴメンナサイ。</p>
<p><a href="javascript:window.open('http://ua-labo.com/_iwata/090507/Pyramid.html', 'mywindow1', 'width=600, height=600, menubar=no, toolbar=no, scrollbars=no');void(0);"><img src="http://ua-labo.com/_iwata/090507/thumb1.jpg" border="0" /></a></p>
<p><a href="javascript:window.open('http://ua-labo.com/_iwata/090507/Pyramid.html', 'mywindow1', 'width=600, height=600, menubar=no, toolbar=no, scrollbars=no');void(0);">↑こちら</a></p>
<p><br /><strong>遊び方</strong></p>
<p>ゲーム上のピラミッド型になった札と、それ以外の<br />場札（画面下にあります）で構成されます。場札は一番上が<br />表向いています。<br />ゲーム上での場札は一番上とそれ以外で左右に配置しています。</p>
<p>表向いているカード（ピラミッド型のカード・<br />場札の一番上のカード）の中で2枚の数字の<br />合計が13になる組み合わせをクリックすると、<br />そのカードが消化されます。<br />キングの場合は最初にクリックすると、単独で消化されます。</p>
<p>場札の裏向いている方をクリックすると次のカードが<br />一番上になり表になります。</p>
<p>ピラミッドカードをすべて消化するとクリアになります。</p>
<p>ゲームらしさをつけるために、<br />特別ルールとして最初に200ポイント付与するように<br />しました。<br />このポイントが0になるとゲームオーバーです。</p>
<p>ポイントが減るのは下の3つのパターンです。<br />・1秒経過　<strong>1ポイント減<br /></strong>・おてつき（13にならない組み合わせ）　<strong><font color="#ff0000">10ポイント減</font><br /></strong>・場札をすべてめくって、おかわりをしたとき　<strong><font color="#ff0000">30ポイント減</font></strong></p>
<p>右下の「リトライ」ボタンで最初からやり直せます。</p>
<p><br />作った後で気づいたのですが、これって、画像(XAMLでいう<br />Imageタグ)はFlashのように本体にインクルードせず、外部画像と<br />して扱われるんですね...<br />なので、初回は秒数が過ぎてしまった状態で全部の画像が<br />表示されるという状態になってしまいました。。。</p>
<p>試作品なので、かなりユーザーに優しくない感がありますが、<br />今回でSilverlight関連のＣ＃がかなり分かったきましたので<br />Flashのクラスと対応する記事がかければと思います！</p>
<p><strong>追記：現在はカードの配置はランダムです。おかわりせずに<br />解けるようなカードの配列を作成するロジックができたら<br />実装したいですね。<br />そしたらゲームのルールを変えると思います。</strong></p>
<p><strong>追記2：使用画像をxapの中に含めることができました。<br />Expression Blend上で[プロジェクト]→[既存のアイテムの追加]で<br />画像を指定すればよいだけです。Ctrl+IでもＯＫです。<br />多量のpngファイルなので500KBを超えてしまいました。<br/>ビルド時間も若干長くなります。</strong></p>]]></description>
<link>http://www.ua-labo.com/#/pid000030</link>
<pubDate>Thu, 07 May 2009 01:53:36 +0900</pubDate>
</item>

<item>
<title>IllustratorでPhotoshop書き出し（レイヤー保持）について</title>
<category>OTHERS,PHOTOSHOP</category>
<description><![CDATA[<p>連休ももう最終日です。早いですね。</p>
<p>Silverlightのトランプゲームを作るため、<br />昔Flashで試みた(今はAIRですが)トランプゲーム用の<br />Illustratorデータでpng画像を書き出そうと考えました。<br />その手段としてIllustratorからPhotoshopデータを<br />レイヤー保持して書き出したところ、こっちが期待<br />してない結果になってしまったのでメモしておきます。<br />ちなみにどちらもCS4です。昔はうまくいったのですが...</p>
<p><img src="http://ua-labo.com/_iwata/090506/thumb1.jpg" /></p>
<p>こういったレイヤー数の多い<br />Illustratorデータを<br />[ファイル]→[書き出し]で<br />ファイル形式をPhotoshop(.psd)で。</p>
<p>&nbsp;
<p>
<p><img src="http://ua-labo.com/_iwata/090506/thumb2.jpg" /></p>
<p>嫌な予感のダイアログが。</p>
<p>&nbsp;
<p>
<p><img src="http://ua-labo.com/_iwata/090506/thumb3.jpg" /></p>
<p><br />Photoshopで開くと、一番上だけ？レイヤーセットに<br />なっていて、あとは無理やり統合されてました。</p>
<p>&nbsp;
<p>
<p><br />色々調べると、レイヤーの解釈がパス単位になっており、<br />メモリが足りないのだとか。<br />Illustrator8+Photoshop5なら上手くいくのかな<br />とも考えましたが、Vistaだし、インストールするのも<br />不具合おきたら困るので、やめました。</p>
<p>あきらめかけてましたが、最近トライアル版を取得した<br />前回の記事でお話したExpression Designという<br />ソフトがaiファイルをそのまま読み、psdファイルを<br />書き出してくれるということを思い出し、早速やって<br />みました。</p>
<p><br />Expression Design上でaiファイルを読み、レイヤー状態がちゃんと<br />保持されていることを確認後、[ファイル]→[エクスポート]で下図のように<br />「PSD」を選択し、「レイヤー保持」チェックをして、<br />「すべてをエクスポート」ボタンを押下すると...</p>
<p><img src="http://ua-labo.com/_iwata/090506/thumb4.jpg" /><br /></p>
<p><img src="http://ua-labo.com/_iwata/090506/thumb5.jpg" /></p>
<p><br />レイヤー保持がされてpsdが書き出されていました！<b>やった～！</b><br />（レイヤー数によっては書き出しの時間がかかります）<br />もちろんXAMLも書き出せます。Canvasタグの構造も<br />しっかりしているかも。</p>
<p>これって別に感動することではないとは<br />思うのだけど、なんでイラレはこうなったのだろう？<br />私のやりかたが間違っているのでしょうか？</p>
<p><br />あと1日でSilverlightの簡単なトランプゲームができるか<br />微妙ですが、なんとかがんばります。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000029</link>
<pubDate>Wed, 06 May 2009 03:16:28 +0900</pubDate>
</item>

<item>
<title>Silverlightをさわってみました。</title>
<category>SILVERLIGHT</category>
<description><![CDATA[<p>最近社内で覚えよう運動が活発になりつつあるSilverlight。<br />FlashDeveloperの私としても同じRIAということで、<br />何かつくりつつ覚えていこうと本を片手に奮闘してます。</p>
<p>今回は全くの初心に返って、簡易なインタラクション＆<br />アニメーションをつくってみました。<br />女の子をクリックするとハートがでます。</p>
<p><a href="javascript:window.open('http://ua-labo.com/_iwata/090502/sl.html', 'mywindow1', 'width=357, height=270, menubar=no, toolbar=no, scrollbars=no');void(0);"><img src="http://ua-labo.com/_iwata/090502/thumb1.jpg" border="0" /></a><br /><a href="javascript:window.open('http://ua-labo.com/_iwata/090502/sl.html', 'mywindow1', 'width=357, height=270, menubar=no, toolbar=no, scrollbars=no');void(0);">↑こちら</a> </p>
<p><br />SilverlightはFlashと違って、編集中のあらゆるところで<br />テキスト(XAML)で管理しています。上の例では、イラスト類は<br />もともとIllustratorで作られたものであり、これをXAMLで<br />保持しています。<br />XAMLを作成するツールはExpression Design、Expression Blend<br />とあるのですが、Flash制作の中での役割に置き換えると、<br />Expression Degisn→Illustrator(PhotoShop?)、Expression Blend→Flash<br/>と考えてもらっていいと思います。</p>
<p>Illustratorのパスをコピーして、Expression Blendにペーストする<br />ことはできないようです。<br />そのため、一旦Expression Designにペーストして、再コピーして<br />Expression Blend上でペーストする必要があります。<br />パスの精度ですが、下図のようにほとんど変化しません。<br />※同じ400％なのですが、Illustratorだけ小さく見えるのは<br />等倍でペーストできていないのかな？</p>
<p><img src="http://ua-labo.com/_iwata/090502/thumb2.jpg" /></p>
<p>&nbsp;</p>
<p>または、Illustratorに「XAMLExport」というプラグインが<br />ありますので、こちらを使うと、XAMLに書き出ししてくれます。<br />Expression Degisnがない場合はこれが使えます。</p>
<p><a href="http://www.mikeswanson.com/xamlexport/" target="_blank">→Adobe Illustrator to XAML Export</a></p>
<p><b>使い方</b><br />[ファイル]→[書き出し]→ファイルの種類からXAMLを選択して、<br />書き出します。（WPFとSilverlightがあるようです）</p>
<p><img src="http://ua-labo.com/_iwata/090502/thumb3.jpg" /></p>
<p>↑のレイヤー構造が↓のXAML（一部です）になります。100KBぐらいのテキストになりました。</p><pre class="actionscript" name="code">  <!-- 女のこ/<パス> --&gt;
  <path data="F1 M 111.355,91.306 C 112.055,104.585 107.162,132.307 109.958,143.725 C 112.751,155.140 118.575,162.830 122.072,165.392 C 125.565,167.954 144.669,175.647 144.669,175.647 C 144.669,175.647 189.633,172.849 194.757,166.326 C 199.885,159.799 215.025,133.244 198.486,99.229 C 181.947,65.213 165.870,56.829 165.870,56.829 L 136.983,58.225 L 120.207,61.950 L 111.355,91.306 Z" fill="#ffffddb2" />

  <!-- 女のこ/<パス> -->
  <path fill="#ffffffff" data="F1 M 141.408,148.152 C 133.970,147.621 134.886,159.566 140.710,156.542 C 146.536,153.508 144.669,148.384 141.408,148.152 Z" />

  <!-- 女のこ/<パス> -->
  <path fill="#ffffffff" data="F1 M 138.827,126.854 C 129.993,104.585 119.510,110.178 114.617,112.042 C 109.724,113.907 115.782,130.911 121.605,133.244 C 127.431,135.570 135.818,132.779 138.145,130.911 C 140.476,129.050 138.827,126.854 138.827,126.854 Z" />

  <!-- 女のこ/<パス> -->
  <path fill="#ffffffff" data="F1 M 157.950,126.252 C 175.188,111.109 189.397,117.629 197.087,125.322 C 199.885,128.113 197.087,128.349 197.087,128.349 C 197.087,128.349 187.769,141.163 176.818,140.465 C 165.870,139.764 157.715,133.244 155.387,129.981 L 157.950,126.252 Z" />

  <!-- 女のこ/<パス> -->
  <path fill="#ffd87d00" data="F1 M 136.983,43.546 C 88.756,37.492 88.756,106.915 108.326,116.698 C 104.365,94.802 112.284,74.534 129.292,64.748 C 114.381,86.185 121.371,98.295 125.565,115.535 C 125.100,94.569 131.159,80.589 145.600,68.709 L 147.697,68.709 C 147.697,68.709 135.352,91.539 155.152,106.915 L 156.317,106.915 C 156.317,106.915 152.359,92.476 157.950,82.686 C 158.648,94.104 165.170,106.915 176.354,114.372 C 169.832,99.694 174.491,86.415 175.887,82.686 L 180.780,94.569 C 180.780,94.569 192.195,117.167 201.746,122.291 C 207.807,135.570 203.843,155.841 195.924,166.326 L 198.951,170.051 L 200.350,176.807 C 200.350,176.807 205.245,176.807 208.738,175.647 C 212.230,174.478 229.009,162.364 238.792,150.251 C 248.579,138.132 265.816,99.930 254.168,79.193 C 254.168,79.193 245.080,51.003 229.704,39.588 C 214.327,28.170 211.998,28.872 211.998,28.872 C 204.312,20.251 195.226,22.112 190.564,27.705 C 181.249,13.960 172.395,11.864 162.377,21.415 C 145.133,23.511 133.486,36.558 130.458,41.220 L 136.983,43.546 Z" />
  
</pre>
<p>パスごとにコメントが書かれるので分かりやすいです。<br />但し、部分パーツごとにコピーペーストには向いてないかもしれません。</p>
<p><br />現時点ではこの位しかやっていませんが、動的にイメージを表示を<br />することができれば何でもできるようになると思いますので、<br />GW終わるまでにカンタンなゲームを作れてるといいですね。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000028</link>
<pubDate>Sat, 02 May 2009 23:07:32 +0900</pubDate>
</item>

<item>
<title>第1回 Flash座談会 ～ASデザインパターン考証 Bridge編～　</title>
<category>ACTIONSCRIPT,ALGORITHM</category>
<description><![CDATA[<p>こんにちは、KnockKnockです。<br />週一回行われているFlash関連の座談会をせっかくなので、U/A Laboに載せていこうと思います。</p>
<p>まず第一回として、デザインパターンをActionScriptで考え話した内容を共有しようと思います。<br />といいましてもみんなで考えたというより自分はこのように使っているという話だったので、<br />まだまだ考えが浅い面はあると思いますがお付き合いください。</p>
<p>まずもともとプログラマーでない方にはなじみのない言葉だと思いますが「デザインパターン」というものがあります。<br />これは<strong>プログラムを書く上で経験を積むうちに「こういった問題を解決するには、<br />こういう構造のプログラムを書けばいい」というノウハウを他人が参照できるように明示的に整理したもの</strong>です。<br />クラスとインターフェースをそれぞれどのように設計していけば<strong>カプセル化</strong>、<strong>拡張性</strong>が保てるか、<br />またデザインパターンを作法として利用することで可読性をあげることができます。</p>
<p>Javaをはじめとするオブジェクト指向言語ではこのデザインパターンがよくつかわれますが、<br />ActionScriptでも同じでデザインパターンを導入することでその恩恵にあずかることができると思います。<br />実際はProgressionやTweenerなどのライブラリですでに利用していることではありますが。</p>
<p>前置きが長くなりましがデザインパターンはおもに23パターンあります。<br />それぞれが用途に応じて存在しますが、今回は「Bridge」を見ていきたいと思います。</p>
<p><u>1) Bridgeの概略</u></p>
<p>まず<strong>「Bridge」とは機能と実装のクラスを分けるパターン</strong>です。<br />あるクラスに新しい機能を追加したいと考えたときクラスを拡張して派生クラスを作ることが出来ますが、<br />さらに新しい機能を追加したいと考えると、またさらに拡張して派生クラスを作っていくことになります。<br />そうしているうちにクラスの階層がどんどん深くなってしまい、さらにはクラス同士の関係が密接に絡み合ってしまいます。<br />結果としてカプセル化と拡張性はクラス階層が深くなる程なくなってしまいます。<br />もちろんそれが間違っているわけではありません。クラスの継承関係がゆるぎなければそれはそれで問題ないかと考えます。<br />ただ、もうちょっと柔軟に機能を追加していきたいなと考えたときにこのBridgeが役に立ちそうです。</p>
<p><u>2) ActionScriptにおけるBridgeの利用例</u></p>
<p>FlashではMovieClipやSpriteなどDisplayObjectの表示制御が重要です。<br />addChildした後にどのように表示、非表示していくかの機能をクラス化した例です。</p>
<p><img class="mt-image-none" alt="UML-Bridge.jpg" src="http://ua-labo.com/images/knockknock/UML-Bridge.jpg" width="717" height="433" /></p>
<ul>
<li><strong>Displayクラス</strong>：DisplayImpl型のインスタンスを所有（コンストラクタで受け取る）し、そのインスタンスのメソッドを実行します。</li>
<li><strong>DisplayImplクラス</strong>：実装の抽象クラス。</li>
<li><strong>InOutDisplayImplクラス</strong>：DisplayImplの派生クラス。visible = false, trueによる表示、非表示制御を実装しています。<br />durationプロパティによって遅延処理されます。</li>
<li><strong>FrameInOutDisplayImplクラス</strong>：DisplayImplの派生クラス。<br />フレームラベルに「open」「close」を設定することでフレームアニメーションでの表示、非表示制御を実装しています。<br />durationプロパティによって遅延処理されます。</li>
<li><strong>FadeInOutDisplayImplクラス</strong>：DisplayImplの派生クラス。<br />スクリプトによるフェードイン、フェードアウト制御を実装しています。<br />durationプロパティによって遅延処理されます。transitionプロパティによってトランジションが変更できます。<br />timeプロパティによってフェードイン、フェードアウトの時間を変更できます。</li></ul>
<p><u>3) 作成したInOutDisplayクラスの利用</u></p>
<p>作成した表示、非表示制御クラスを利用するには、以下のようになります。</p>
<p></p><pre class="actionscript" name="code">// 表示、非表示の機能を実装したインスタンス
this._obj0InOut = new Display( new InOutDisplayImpl( this.obj0 ) );
this._obj1InOut = new Display( new FrameInOutDisplayImpl( this.obj1 ) );
this._obj2InOut = new Display( new FadeInOutDisplayImpl( this.obj2 ) );

// プロパティの設定
this._obj1InOut.duration = 1;
this._obj2InOut.transition = "easeOutCubic";
this._obj2InOut.time = 0.5;

// 表示
this._obj0InOut.show(); // visible = true;
this._obj1InOut.show(); // 1秒後にフレームアニメーションによる表示
this._obj2InOut.show(); // 0.5秒のスクリプトアニメーションによる表示

// プロパティの設定
this._obj1InOut.duration = 0;
this._obj2InOut.transition = "easeInCubic";
this._obj2InOut.time = 1;

// 非表示
this._obj0InOut.close(); // visible = true;
this._obj1InOut.close(); // 0秒後にフレームアニメーションによる表示
this._obj2InOut.close(); // 1秒のスクリプトアニメーションによる表示

</pre>
<p><u>4) 利用における感想</u></p>
<p>利用していて感じたことは</p>
<ul>
<li>クラス同士の関係が弱い（委譲）ので、<strong>変更に強い</strong>。</li>
<li>新しい機能が欲しければ機能のクラスを作成してインスタンスを作ればいい。</li>
<li>クラス内のインスタンスが多くなるので、少々ややこしくなる。</li>
<li>DisplayObjectにリンゲージされているクラスに実装するべき機能か、追加機能のクラスに実装する機能かを慎重に考える必要がある。</li>
<li>表示処理開始や表示処理終了のイベントはaddEventListenerしておかなければならない。</li>
<li>追加機能から派生したクラスをあまり作らず、なるべくシンプルにした方がいい。</li></ul>
<p>今回は詳しくは説明しませんが、ボタンやチェックボックス、ラジオボタンも機能のクラスとして作成しています。</p>
<p></p><pre class="actionscript" name="code">// シンプルなロールオーバー機能付きボタン
this._button0Simple = new Button( new simpleButtonImpl( this.button0 ) );
this._button0Simple.current = false; // カレント表示
this._button0Simple.enable = true; // クリック可能
</pre>
<p></p>
<p>といった感じです。</p>
<p>まだまだ考えなければならないことはあると思いますが、<br />以上がActionScriptにおける自分なりのBridgeパターンの活用方法です。</p>
<p>この他にもたくさんデザインパターンがあります。<br />特にIteratorやSingletonなどは利用しやすいパターンです。<br />次の機会にでもご紹介していこうとおもいます。<br />では第2回Flash座談会をお待ちください。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000027</link>
<pubDate>Tue, 28 Apr 2009 22:40:57 +0900</pubDate>
</item>

<item>
<title>Silverlightはじめました。</title>
<category>SILVERLIGHT</category>
<description><![CDATA[<p>Silverlight 3が3月に発表されました。DeepZoomに続きOut of Browser機能など搭載され、今後ニーズの拡大を鑑みて、UniteairでもSilverlightをはじめました。</p>
<p>今後ここでSilverlightに関して気になったこと、TIPSなどを紹介していく予定です。</p>
<p>今回はSilverlight 2の開発にあたり、Expression Blend 2のインストールに関する注意点と自作ボタンの作成方法を記載します。<br />特にわかりにくかったので。。。</p>
<p>&nbsp;</p>
<p><strong>・Expression Blend 2のインストールに関する注意点</strong></p>
<p>&nbsp;まず、Expression Blend 2をインストールします。Windows XPなどで.NET Framework 3.5が入ってない方でもセットアップ時に自動的にインストールされます。</p>
<p>次にExpression Blend 2 SP1 をインストールします。これを忘れてしまうと以下のように「Silverlight 2アプリケーション」が表示されません。</p>
<p>
<p><img class="mt-image-none" height="340" alt="sl_p1_img_01.jpg" src="http://ua-labo.com/images/akuze/sl_p1_img_01.jpg" width="522" /></p>
<p>&nbsp;</p>
<p></p>
<p><strong>・自作ボタンの作成</strong></p>
<p>まずボタンにするグラフィックを作成します。ここでは簡単に楕円を描きました。</p>
<p><img class="mt-image-none" height="264" alt="sl_p1_img_02.jpg" src="http://ua-labo.com/images/akuze/sl_p1_img_02.jpg" width="500" /></p>
<p>次に[ツール]⇒[ボタンの作成]をクリックします。<br />（ここがわかりにくい。。）</p>
<p><img class="mt-image-none" height="264" alt="sl_p1_img_03.jpg" src="http://ua-labo.com/images/akuze/sl_p1_img_03.jpg" width="500" /></p>
<p>以下の画面は必要に応じて名前など変更してください。</p>
<p><img class="mt-image-none" height="238" alt="sl_p1_img_04.jpg" src="http://ua-labo.com/images/akuze/sl_p1_img_04.jpg" width="386" /></p>
<p>右にあるプロパティの上にある種類が「Button」になっていればOK。&nbsp;</p>
<p><img class="mt-image-none" height="264" alt="sl_p1_img_05.jpg" src="http://ua-labo.com/images/akuze/sl_p1_img_05.jpg" width="500" /></p>
<p>今度はボタンにロールオーバーアクションをつけます。<br />レイヤー上の[button]またｈデザインビュー上のボタンオブジェクト上で右クリックをして[コントロールパーツ（テンプレート）の編集]⇒[テンプレートの編集]をクリック。<br />（ここもわかりにくい。。）</p>
<p><img class="mt-image-none" height="281" alt="sl_p1_img_06.jpg" src="http://ua-labo.com/images/akuze/sl_p1_img_06.jpg" width="500" /></p>
<p>&nbsp;そうすると左手の「ステート」と「オブジェクトとタイムライン」が変わります。<br />ここでボタンのロールオーバーのアニメーションなどを追加できます。</p>
<p><img class="mt-image-none" height="264" alt="sl_p1_img_07.jpg" src="http://ua-labo.com/images/akuze/sl_p1_img_07.jpg" width="500" /></p>
<p>ステートで「MouseOver」を選択します。この時「⇒+」みたいなボタンをクリックし、[MouseOver ⇒ Normal]を選択します。<br />これでロールアウトのアニメーションが自動的に設定されます。戻る時間はこの後作成するアニメーションの時間が基準に決めると良いです。</p>
<p>
<p><img class="mt-image-none" height="264" alt="sl_p1_img_08.jpg" src="http://ua-labo.com/images/akuze/sl_p1_img_08.jpg" width="500" /></p>
<p></p>
<p>[MouseOver]を選択したタイミングで「オブジェクトとタイムライン」がストーリーボード作成状態になっています。早速にアニメーションを作ってみましう。<br />後は[Pressd]など必要に応じて作成していけばOKです。</p>
<p>&nbsp;</p>
<p>これで、ボタンが簡単に作れることがわかりましたが、説明は大変なこともわかりました。。。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000026</link>
<pubDate>Wed, 22 Apr 2009 15:30:00 +0900</pubDate>
</item>

<item>
<title>FlashPlayer10でファイルを保存</title>
<category>ACTIONSCRIPT,FLASH</category>
<description><![CDATA[<p>FlashPlayer10からAIRみたいにローカルに<br />ファイルを保存することができるようになりました。<br />知ってから大分経つのですが、案件に使えるかもしれないので<br />ユーザーが描いた絵をローカルにJpeg保存するswfを作ってみました。</p>
<p><a href="javascript:window.open('/_iwata/090420/fileTest.html', 'mywindow1', 'width=400, height=300, menubar=no, toolbar=no, scrollbars=no');void(0);">↓こちら</a><br /><a href="javascript:window.open('/_iwata/090420/fileTest.html', 'mywindow1', 'width=400, height=300, menubar=no, toolbar=no, scrollbars=no');void(0);"><img alt="" src="http://ua-labo.com/_iwata/090420/thumb1.jpg" border="0" /></a></p>
<p>※別窓で開きます。昔ケータイで遊びで作った<br />スイカ割りゲームのキャラの流用です。<br />デザイナーではないので淡白なインターフェースで<br />すみません。</p>
<p>&nbsp;</p>
<p><a href="https://peugeot207.jp/special/adcreator.html" target="_blank">「ADCreator」</a>みたいなコンテンツで作成した画像を<br />サーバーを介することなく、ローカルで取得できるわけです。<br />スクリーンキャプチャでいいじゃん、と思われる方もいらっしゃるでしょうけど、<br />たとえば、プレビューは小さめで、解像度の高いjpgを出したいときに裏で絵を描画して、<br />jpg出力することも可能です。</p>
<p>実際アップしてみて、試してみましたが自宅のVistaのIE7でIO_ERRORがでてしまいました。<br />下図のようにスイカ君がしゃべったら保存できない状態です。</p>
<p><img alt="" src="http://ua-labo.com/_iwata/090420/thumb2.jpg" border="0" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>調べたところIE7には「保護モード」があるらしくデフォルトでONになっているようです。&nbsp;</p>
<p><img alt="" src="http://ua-labo.com/_iwata/090420/thumb3.jpg" border="0" /></p>
<p><br />こいつのせいで、IO_ERRORが発生してしまうということです。<br />外したらうまくいきましたが、脅しのようなメッセージが<br />すでに開いているIE7からすべて出てきます。<br />これって結構ハードル高いですね。。<br />ヘルプをつけても実用レベルとして使えるかどうか。。。</p>
<p>&nbsp;</p>
<p><img alt="" src="http://ua-labo.com/_iwata/090420/thumb4.jpg" border="0" /></p>
<p>いきなりこんな怖いメッセージが！！さらされるのかよ！！</p>
<p>&nbsp;</p>
<p><img alt="" src="http://ua-labo.com/_iwata/090420/thumb5.jpg" border="0" /></p>
<p>追い討ちをかけるように開いているIEの各ウインドウに警告がでます。。。</p>
<p>&nbsp;</p>
<p>FireFoxやXP+IE6では問題なかったですがIE7のシェアって<br />高いですよね。いい方法がないもんですかね。</p>
<p>現状では問題はありますが、面白そうなので、色々調査改良してみます。</p>
<p><strong>追記：XP+IE7では保護モードがなかったので上手くできてました。</strong></p>
<p>&nbsp;</p>]]></description>
<link>http://www.ua-labo.com/#/pid000025</link>
<pubDate>Mon, 20 Apr 2009 00:50:23 +0900</pubDate>
</item>

<item>
<title>U/A自動化倶楽部　Vol2 基本部分Flashオーサリングの自動化</title>
<category>ACTIONSCRIPT,FLASH,JAVASCRIPT,PHOTOSHOP</category>
<description><![CDATA[<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline">&nbsp;</span>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline">&nbsp;</span>こんにちはKnockKnockです。<br />実は長女が生まれるんですが、最近では嫁の里帰りを指折り数えてます。<br />めっきり春めいてきましたがいかがお過ごしですか？</p>
<p>で、今回ですが、前からやりたかったんですがなかなか手をつけられずにいた自動化ツール、<br />「基本部分オーサリングの自動化」です。<br />Webのお仕事ではPhotoShopでデザインデータ作られることが多いかと思います。<br />PhotoShopからPNGデータを書き出して、flaに読み込んでといった作業でありますが、<br />これらは下準備のようなものですが結構時間がかかります。<br />本当はロジックや演出を考える時間が欲しいのに・・・。</p>
<p>PhotoShopはJavaScriptでコマンドを実行することが出来ますが、<br />同じようにFlashもJavaScriptでコマンドを実行することが出来ます。知ってのとおりJSFLです。<br />今回はPhotoShopJSとJSFLを利用して基本的な部分のオーサリングを自動化してしまおうと。</p>
<p>まずは以下のファイルをダウンロードしてください。</p>
<p>
<p>
<p>
<span class="mt-enclosure mt-enclosure-file" style="DISPLAY: inline"><a href="http://ua-labo.com/archive/knockknock/knockknock090414.lzh">knockknock090414.lzh</a></span></p>
<p>基本部分オーサリング自動化.jsxbin　：　PhotoShopJS<br />基本部分オーサリング自動化.mxp　：　Flash拡張ファイル（ダブルクリックで拡張可能）<br />※今回の自動化実行環境はCS4以降となります。</p>
<p></p>
<p></p>
<p>使用方法</p>
<p>
<p><strong>１）　PhotoShopのデザインデータを整理します。</strong></p>
<p>
<p>
<p><strong><img class="mt-image-none" height="121" alt="20090414image0.jpg" src="http://ua-labo.com/images/knockknock/20090414image0.jpg" width="153" /></strong></p>
<p>
<p>
<p><strong><img class="mt-image-none" height="299" alt="20090414image1.jpg" src="http://ua-labo.com/images/knockknock/20090414image1.jpg" width="400" /></strong></p>
<p>デザインデータはサンプルとしてこんな感じ。<br />大切なのはPSDのレイヤー情報の整理です。以下のように整理します。</p>
<p>
<p>
<p><img class="mt-image-none" height="761" alt="20090414image2.jpg" src="http://ua-labo.com/images/knockknock/20090414image2.jpg" width="286" /></p>
<p>このレイヤー情報がflaに反映されますので、ここでflaのMovieClipの階層を意識して整理します。</p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline">PhotoShopからはレイヤーグループ名、とレイヤー名を元に、<br />クラスファイルとPNGファイルが作成されます。</span></p>
<p></p>
<p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline">レイヤーグループはflaではグループ以下のオブジェクトを内包するMovieClipになります。<br />クラスファイルではパッケージが作成され、パッケージ直下にメインとなるクラスが作成されます。</span></p>
<p></p>
<p>
<p>
<p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline">レイヤーは接頭にオプション文字を置くことで、生成され方が変わります。<br />オプション文字は以下の通りです。<br />・「*」　：　MovieClip<br /></span>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline">・「-」　：　GraphicSymble<br /></span>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline">・「MC_」　：　MovieClipを継承したクラスをリンケージしたMovieClip<br /></span>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline">※オプションを何も記述しない場合は「MC_」と同じになります。</span></p>
<p></p>
<p></p>
<p></p>
<p>
<p>
<p>
<p>
<p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline">以下の注意点があります。<br />・同じレイヤーグループ内に同一名称の名前のものは置かないでください。<br />（※オプション文字を含まず）<br />・レイヤーグループとレイヤーのオプション「-」以外は名前に半角英数以外は使用しないでください。<br />また頭文字に数字は使えません。</span></p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"></span></p>
<p></p>
<p></p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><strong>２）　PhotoShopJSの実行</strong></span></p>
<p></p>
<p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline">メニューの「ファイル &gt; スクリプト &gt; 参照」でダウンロードした「基本部分オーサリング自動化.jsxbin」を実行してください。<br />以下のダイアログが開きます。</span></p>
<p></p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline">&nbsp;</span><img class="mt-image-none" height="382" alt="20090414image3.jpg" src="http://ua-labo.com/images/knockknock/20090414image3.jpg" width="406" /> 
<p>・　PNGファイルを書き出す　：　レイヤー名を元にpngを作成します。<br />・　layout.textを書き出す　：　flaファイルにレイアウトするためのテキストデータ。<br />（※これがないとJSFLは実行できません。）<br />・　ActionScriptファイルを書き出す　：　レイヤーグループ名とレイヤ名を元にasファイルを書き出します。<br />・　プロジェクト名（半角英）　：　クラスパッケージを作成する際やライブラリを整理する際に使用します。（※必須項目）<br />・　著者　：　クラス内部にauthorを記述します。<br />・　デフォルトで非表示　：　クラス内部コンストラクタに「visible = false」を記述します。<br />（※ロジックがない状態でいっぺんにクラスファイルと表示オブジェクトが展開されるので、とりあえず非表示にしておかないと編集が困難になります。）</p>
<p></p>
<p>
<p><img class="mt-image-none" height="112" alt="20090414image4.jpg" src="http://ua-labo.com/images/knockknock/20090414image4.jpg" width="197" /></p>
<p></p>
<p>PSDファイルと同階層に同じ名前でファイル一式が作成されます。</p>
<p><img class="mt-image-none" height="445" alt="20090414image5.jpg" src="http://ua-labo.com/images/knockknock/20090414image5.jpg" width="219" /></p>
<p>
<p>「classes」の中にクラスファイルが作成され、「materials」の中にpngファイルが作成されます。<br />同じ様な階層構造でしまわれるので、後の更新作業もやりやすくなります。</p>
<p></p>
<p>
<p><img class="mt-image-none" height="439" alt="20090414image6.jpg" src="http://ua-labo.com/images/knockknock/20090414image6.jpg" width="238" /></p>
<p></p>
<p>今回作成されるクラスファイルは、レイヤーグループとオプションに「MC_」をつけたレイヤー。<br />クラスの頭に「MC_」がつくのはMovieClipとクラスが1対1になっている場合につける<br />弊社での決まり事にならったものです。弊社仕様ですいません。</p>
<p>
<p><img class="mt-image-none" height="536" alt="20090414image7.jpg" src="http://ua-labo.com/images/knockknock/20090414image7.jpg" width="434" /></p>
<p>自動で書き出されたクラスのサンプルです。静的配置したものに関してはpublicで宣言され、<br />クラスに紐づくものはクラスファイルがimportされます。</p>
<p><strong>３）　layout.txtをコピーする</strong></p>
<p></p>
<p><strong><img class="mt-image-none" height="87" alt="20090414image8.jpg" src="http://ua-labo.com/images/knockknock/20090414image8.jpg" width="83" /></strong></p>
<p>今度は書き出した情報をJSFLで利用するためにPhotoShopから書き出された<br />layout.txtをコピーします。layout.txtは「materials」ディレクトリにあります。</p>
<p>
<p><img class="mt-image-none" height="383" alt="20090414image9.jpg" src="http://ua-labo.com/images/knockknock/20090414image9.jpg" width="605" /></p>
<p>テキストエディタで開いて「ctrl + a」、「ctrl + c」ですべてのテキストをメモリ上にコピーします。</p>
<p><strong>４）　flaファイルの初期設定をする</strong></p>
<p>自動配置するためのflaを新規で作成します。<br />ステージサイズを調整して、パブリッシュ設定をして保存します。<br />どこに保存してもかまいませんが、先ほど書き出したファイル一式が近い方が、<br />後々便利かと思います。</p>
<p></p>
<p>
<p><img class="mt-image-none" height="612" alt="20090414image10.jpg" src="http://ua-labo.com/images/knockknock/20090414image10.jpg" width="524" /></p>
<p>「リソースパス」をPhotoShopより自動で書き出されたclassesに設定します。<br />ここで重要なのですが「ステージのインスタンスを自動宣言」のチェックを外してください。<br />基本的に静的配置されたオブジェクトはクラス上に自動ですべて宣言されます。</p>
<p><strong>５）　JSFLを実行</strong></p>
<p></p>
<p>実行の前に「基本部分オーサリング自動化.mxp」をダブルクリックで、<br />拡張機能をインストールしておいてください。<br />ファイルメニューの「コマンド &gt; 基本部分オーサリング自動化」で自動化を実行します。</p>
<p>
<p><img class="mt-image-none" height="336" alt="20090414image11.jpg" src="http://ua-labo.com/images/knockknock/20090414image11.jpg" width="468" /></p>
<p>「基本部分オーサリング自動化」ダイアログが開きます。<br />・　layout.as　：　先ほどコピーしたlayout.asの内容をペーストします。<br />・　プロジェクト名　：　PhotoShopの自動処理時に設定したプロジェクト名と同じものを入力してください。<br />・　リンゲージ　：　書き出されたクラスファイルへリンゲージを設定します。<br />・　ActionScriptレイヤー　：　MovieClipの一番上のレイヤーにActionScript用の空のレイヤーを作成します。<br />・　ActionScriptレイヤー名　：　レイヤー名を指定します。</p>
<p></p>
<p>
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><img class="mt-image-none" height="391" alt="20090414image12.jpg" src="http://ua-labo.com/images/knockknock/20090414image12.jpg" width="656" /></span></p>
<p>
<p>次に「layout.textを選択してください」ダイアログが開きますので、layout.textを選択してください。<br />書き出したファイルとの位置関係を把握させるために選択が必要となります。</p>
<p><strong>６）　パブリッシュ</strong></p>
<p>アイテム数によってはしばらく処理に時間がかかりますが、処理が完了するまでまってください。<br />500アイテム程度までは試したことがあります。</p>
<p></p>
<p>
<p><img class="mt-image-none" height="292" alt="20090414image13.jpg" src="http://ua-labo.com/images/knockknock/20090414image13.jpg" width="480" /></p>
<p>完了しました。こんな感じです。</p>
<p></p>
<p>
<p><img class="mt-image-none" height="1407" alt="20090414image14.jpg" src="http://ua-labo.com/images/knockknock/20090414image14.jpg" width="494" /></p>
<p>あとはパブリッシュして完了ですが、PhotoShop自動化処理時に「デフォルトで非表示」にチェックを入れていると、<br />すべてのクラスのコンストラクタに「this.visible = false」が挿入されるので何も表示されません。</p>
<p></p>
<p>
<p><img class="mt-image-none" height="163" alt="20090414image15.jpg" src="http://ua-labo.com/images/knockknock/20090414image15.jpg" width="202" /></p>
<p></p>
<p>あとはロジックを埋め込みながら関連するクラスの「this.visible = false」を削除しながら作業することとなります。<br />もしくはFlash自動化処理時に「リンゲージ：追加しない」を選ぶことでリンゲージを後で自分で設定することもできます。</p>
<p>以上が主な流れになります。</p>
<p>このように機械的な流れをなるべく自動化することにより、あまった時間を演出やロジックにあてることができますが、<br />今回の利点はそれだけではなく、同じツールで自動化することで、頭で考えなくとも、<br />自動で同じルールにのっとって構築することができることです。<br />仕事となれば複数人数で作業することが多いかと思います。<br />もしくは、何かしらの理由で引き継ぐ必要があったり、休みのときに緊急作業の依頼が来たり・・。<br />構築が個人に依存するようだと、やはり個人に負担がかかるのは目に見えてきます。</p>
<p>それを回避するために必要なのはルール決めだと考え、弊社では色々と模索していますが、<br />このツールがその役に立ればと思っています。</p>
<p>まあ、堅い話は抜きにして、まだ作成したばっかなのでデバッグもろくにしていません。<br />今後バージョンアップを重ねていく予定です。</p>
<p>次回も何かしらご紹介していきますのでお待ちください。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000024</link>
<pubDate>Tue, 14 Apr 2009 20:27:31 +0900</pubDate>
</item>

<item>
<title>動体検知その１</title>
<category>ACTIONSCRIPT,FLASH</category>
<description><![CDATA[こんにちは、こないだミスチルのライブに行ってきたメタラーのchikathreesixです。<br /><br />Flashでウェブカメラ使って動体検知ってもうみなさんよくやられていますが、<br />自分は挑戦したことなかったので、一から挑戦してみようと思います！<br /><br />basculeさんのエントリをかなり参考にさせてもらって勉強します。<br /><a href="http://faces.bascule.co.jp/motiondetection/" target="_blank">http://faces.bascule.co.jp/motiondetection/</a><br /><br /><br />動体検知の基本として以下の手順を試してみます。<br /><br />①　カメラからの映像をマイフレームでBitmapDataでdrawして、直前のBitmapDataをさらにBlendMode.DIFFERENCEでdrawします。<br /><br />②　①によってできたBitmapDataを閾値を設定し二値化します。（閾値以下の色は黒に、閾値以上の色は白にします）<br /><br />③　白で描画された部分が動いた部分です。<br /><br />ENTER_FRAMEで実行する関数は以下のような感じです。<br /><br /><pre class="actionscript" name="code">private function _enterFrameAction(e:Event):void {
	_nowBmp.draw(_nextBmp);
	_nowBmp.draw(_video, null, null, BlendMode.DIFFERENCE);
	_nextBmp.draw(_video);
	
			
	_nowBmp.threshold(_nowBmp, _rect, _point, "&lt;=", 0xFF333333, 0xFF000000);
	_nowBmp.threshold(_nowBmp, _rect, _point, "!=", 0xFF000000, 0xFFFFFFFF);
}
</pre>swfはこんな感じ（要ウェブカメラ）<br />
<script type="text/javascript">
swfobject.embedSWF("http://www.ua-labo.com/_chikazawa/motionDetector1.swf", "flashcontent", "640", "240", "9", "http://ua-labo.com/common/scripts/ef/expressInstall.swf");  
</script>

<div id="flashcontent"></div><br />最初の一歩はとても簡単でした。 <br />これからどんどん発展させていきます！]]></description>
<link>http://www.ua-labo.com/#/pid000021</link>
<pubDate>Fri, 10 Apr 2009 13:40:25 +0900</pubDate>
</item>

<item>
<title>クリップウィンドウ　その二</title>
<category>ACTIONSCRIPT,AIR,FLASH</category>
<description><![CDATA[<p>「プロとして恥ずかしくないActionScript 3.0の大原則」に<br />使ったサンプルの続きです。</p>
<p>ちょっとサンプルをアップデートしました。<br />内容はアプリを立ち上げると<br />タスクバーやドックのアイコンから見られます。<br />まずはインストールしてみてください。</p>
<p>今回は本にも書いた注意点。<br />AIR作成時には以下の注意が必要です。</p>
<p><strong>・NativeWindowの最小は123x34<br /></strong>（これ以上小さく指定しても小さくならない）<br /><strong>・HTMLLoaderでswfを表示するにはNativeWindowInitOptionsのtransparentはfalse<br /></strong>（trueにするとswfが表示されない）<br /><br />こんな微妙な制限があります。</p>
<script src="http://ua-labo.com/images/yanbou/swfobject1_5.js" type="text/javascript"></script>

<div id="flashcontent"></div>
<script src="http://ua-labo.com/images/yanbou/clipWindowBadge.js" type="text/javascript"></script>
<br />
<p></p>
<p><strong>関連記事</strong><br /></p>
<blockquote><a href="http://ua-labo.com/entries/pid000009.html">&gt;プロとして恥ずかしくないActionScript 3.0の大原則</a><br /><a href="http://ua-labo.com/entries/pid000010.html">&gt;クリップウィンドウ　その一</a></blockquote>]]></description>
<link>http://www.ua-labo.com/#/pid000019</link>
<pubDate>Fri, 10 Apr 2009 12:53:19 +0900</pubDate>
</item>

<item>
<title>TweenerのトランジションViewer</title>
<category>FLASH</category>
<description><![CDATA[<p>自分は普段Tweenerを使っていますが、<br />トランジションのキーワードがいまいちぴんと来なかったんでViewerを作りました。</p>
<p><img class="mt-image-none" height="356" alt="20090409image0.jpg" src="http://ua-labo.com/images/knockknock/20090409image0.jpg" width="385" /></p>
<p>
<span class="mt-enclosure mt-enclosure-file" style="DISPLAY: inline"><a href="http://ua-labo.com/archive/knockknock/TweenerTester.lzh">TweenerTester.lzh</a></span></p>
<p>
<span class="mt-enclosure mt-enclosure-file" style="DISPLAY: inline"></span></p>
<p>Timeにトゥイーンアニメーションの時間を設定（デフォルトは1秒）して、<br />確認したいトランジションのサムネイルボタンをクリックすると、<br />画面上部のオレンジ色のボールが移動します。<br />あくまでトランジションの雰囲気の確認なのでプロパティの変化はyのみです。</p>
<p>結構昔に作ったんですが、いまだに重宝してますんで紹介しました。<br />次期バーションとして複数のコマンドとプロパティも設定出来るように考えてます。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000022</link>
<pubDate>Thu, 09 Apr 2009 15:24:17 +0900</pubDate>
</item>

<item>
<title>『UA-LABO』オープンしました(2)</title>
<category>FLASH,HTML,JAVASCRIPT</category>
<description><![CDATA[<p>今回の左ナビゲーションFlashを担当させていただいたのですが、こちらはMT使いのDECO君と連携して作成しました。<br />XMLを基本データとして、Flashの表示を形成していくという、Flash使いとしては日常的になっているのですが、マークアップエンジニアであるDECO君には結構、新鮮に映ったようです。<br />たしかにWebアプリケーションなどはVIEWであるHTMLもサーバーサイドで生成しているのに対し、Flashの場合はデータだけ(XMLやCSVとか究極を云えばバイナリでもよい）もらって、表示状態だけ変えればよいので、サーバーの負荷も軽いです。Ajaxもそれは言えるのですがFlashのほうがブラウザ依存が少ないので、優れているとおもいます。</p>
<p><br />話を戻しまして、Flashは相変わらずSEOに弱いので、肝心の記事の部分はHTMLにしました。ということは分かりますよね？<br />このHTMLは現在はあまり見られないフレームを使っています。<br />右フレーム記事のタイトル部分と左フレームのナビ部分がFlashでできています。</p>
<p>左右のフレームの背景色を合わせたり、右フレームのタイトルのブックマークボタンから左のナビのブックマークに反映させるためにFlashのLocalConnectionを使用しています。</p>
<p>背景色も右フレームのロード後に左フレームに色情報を送信しているのですが、１回目でうまくいかなかったときのために、ENTER_FRAMEで何度も送っています。左フレームが正常に色替えをした後、右フレームに送り続けるのをやめさせるよう、送信します。<br />普通これでうまくいくのですが、複数のウインドウを立ち上げたときに挙動がおかしくなってしまいます。LocalConnectionの同じコネクション名で送信しているため、ウインドウ１の右フレームから、ウインドウ２の左フレームに送信してしまう事態に陥るのです。</p>
<p>そこで、インデックスのHTMLのjavascript上で変数を作成し、それを左フレームのナビと右フレームのタイトルにFlashVarsとして付与します。<br />その変数は、MathクラスのrandomでもDateクラスのgetTimeでも構いません。<br />後者の方が被りづらいということで選択しました。<br />その名前をコネクション名として、LocalConnectionを使用した場合、１ウインドウで１コネクションということになりますので、他のウインドウを起動した場合も元ウインドウ間のコマンドの受け渡しを干渉しないようにすることに成功しました。</p>
<p>結構、LocalConnectionって大変ですね...普段やらないのでチョット苦労しました。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000020</link>
<pubDate>Wed, 08 Apr 2009 00:40:15 +0900</pubDate>
</item>

<item>
<title>AIRオートアップデート</title>
<category>ACTIONSCRIPT,AIR,FLASH</category>
<description><![CDATA[<p> オートアップデートとは<br />
AIRアプリをインストールしているユーザーに<br />
インストールされているバージョンより<br />
新しいバージョンがアップされてます、<br />
と伝えることである。</p>
<p>AIRはアプリケーションなので<br />
当然インターネットに繋がらない環境もありうる。</p>
<p>ということで<br />
流れは以下である。</p>
<p>1.回線チェック<br />
　↓OK　　　　　　　　　　→NG　通常表示<br />
2.バージョンデータロード<br />
　↓OK　　　　　　　　　　→NG　通常表示<br />
3.バージョンチェック<br />
　↓アップデート有り　　　　　　　　　　→なし　通常表示<br />
4.アップデートするしない確認<br />
　↓する　　　　　　　　　　→しない　通常表示<br />
5.アップデート</p>
<br />
<strong>■回線チェック</strong><br />
adobe.comに繋がるかチェック
<pre name="code" class="actionscript">private var _monitor:URLMonitor;//通信モニター

//通信チェック
private function checkHttp():void {
	this._monitor = new URLMonitor(new URLRequest("http://www.adobe.com"));
	this._monitor.addEventListener(StatusEvent.STATUS, announceStatus);
	this._monitor.start();
}
//通信監視
private function announceStatus(e:StatusEvent):void {
	if (this._monitor.available) {
		//バージョンデータロードへ
	} else {
		//通常表示へ
	}
}</pre>
<br />
<strong>■バージョンデータロード</strong><br />
自分はシングルトンクラスで管理<br />
xmlにはキャッシュがあるので注意
<pre name="code" class="actionscript">private var _versionXML:XML;

public function loadXml():void {
	var ran:uint = Math.floor(Math.random() * 10000000000);
	var loader:URLLoader = new URLLoader;
	loader.addEventListener(Event.COMPLETE, completeHandler);
	loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
	loader.load(new URLRequest("version.xml?" + ran));
}
//ロードエラー
private function errorHandler(e:IOErrorEvent):void {
	//通常表示へ
}
//ロード完了
public function completeHandler(e:Event):void {
	this._versionXML = new XML(e.target.data);
	//バージョンチェックへ
}
//バージョン
public function rVersion():String {
	return this._versionXML.version.@latest;
}</pre>
XMLは以下
<pre name="code" class="xml">&lt;?xml version="1.0" encoding="UTF-8" ?>
&lt;clipWindow>
	&lt;version latest="1.0" />
&lt;/clipWindow></pre>
<br />
<strong>■バージョンチェック</strong><br />
<pre name="code" class="actionscript">private var _update:UpdateClass;//アップデートウィンドウ
private var _appVersion:String;//現在のバージョン
private var _newVersion:String;//新しいバージョン

//バージョンチェック
private function checkVersion(e:Event):void {
	var appXml:XML = NativeApplication.nativeApplication.applicationDescriptor;
	var ns:Namespace = appXml.namespace();
	this._appVersion = appXml.ns::version[0];
	this._newVersion = this._versionData.rVersion();
	if (this._newVersion != this._appVersion) {
		this._update = new UpdateClass(this._appVersion, this._newVersion);
		this.addChild(this._update);
	} else {
		//通常表示へ
	}
}</pre>
<br />
<strong>■アップデート</strong><br />
<pre name="code" class="actionscript">private var _airLoader:URLLoader;

//ダウンロード
private function downloadAirFile(e:MouseEvent):void {
	this._airLoader = new URLLoader();
	this._airLoader.dataFormat = URLLoaderDataFormat.BINARY;
	this._airLoader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
	this._airLoader.addEventListener(Event.COMPLETE, downloadAirFileCompleteHandler);
	this._airLoader.load(new URLRequest("clipWindow.air"));
}
//ダウンロードエラー
private function errorHandler(e:IOErrorEvent):void {
	//エラー表示
}
//アップデート
private function downloadAirFileCompleteHandler(e:Event):void {
	var airFile:File = File.applicationStorageDirectory.resolvePath("clipWindow.air");
	var fs:FileStream = new FileStream();
	fs.open(airFile, FileMode.WRITE);
	fs.writeBytes(this._airLoader.data);
	fs.close();
	var updater:Updater = new Updater();
	updater.update(airFile, this._newVersion);
}</pre>
<p>以上、チェックが面倒だが<br />
今後を考えると入れておくべきである。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000016</link>
<pubDate>Fri, 03 Apr 2009 15:54:54 +0900</pubDate>
</item>

<item>
<title>『UA-LABO』　オープンしました</title>
<category>OTHERS</category>
<description><![CDATA[<p>ようやく『UA-LABO』がオープンとなりました。管理人のTAKAIWです。</p>
<p>&nbsp;<br />業務が込んでいる等の言い訳をたくさん作りながら？構想から9ヶ月以上も経ってしまいましたが、公開までできて一安心です。</p>
<p><a href="http://www.airgraph.jp/" target="_blank">AIRGRAPH</a>に何度か投稿させていただいたのですが、これからはこちらで実験的なコトを書かせていただきます。<br />またあのイラストのヤツか...と覚えていただいている方もこれからもよろしくお願いします。</p>
<p>私はFlashで仕事をしているのですが、今年はAIRとかiPhoneアプリとか、Android等、他のことにも挑戦したいと思います。<br />プライベートでもやりたいですが、１人でできることは限界があるので、どれかに絞りたいなと思います。<br />幸い、後輩のchikathreesix君はiPhoneアプリにやる気を見せているので、やる機会があれば、教えてもらいつつ何か面白いものが作れれば嬉しい限りですね。</p>
<p>実験的なものをつくりつつ、Flashを覚えたい人用の教室的な記事も書こうと考えています。</p>
<p>なのでFlashをあまり知らない人、Flashをこれから上達させたい人も、ご期待ください。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000017</link>
<pubDate>Tue, 31 Mar 2009 15:59:28 +0900</pubDate>
</item>

<item>
<title>クリップウィンドウ　その一</title>
<category>ACTIONSCRIPT,AIR,FLASH</category>
<description><![CDATA[<p>前回の「プロとして恥ずかしくないActionScript 3.0の大原則」に<br />使ったサンプルです。</p><strong>■クリップウィンドウ</strong><br /><br />
<script src="http://ua-labo.com/images/yanbou/swfobject1_5.js" type="text/javascript"></script>

<div id="flashcontent"></div>
<script src="http://ua-labo.com/images/yanbou/clipWindowBadge.js" type="text/javascript"></script>
<br />変更点はオートアップデートを実装しました。<br /><br />これを実装しておけば、<br />一度インストールした人にもアップデートを教えられる。<br /><br /><strong>■使い方</strong><br />1.URLを入れる<br />2.「ENTER」キー、または「矢印」ボタンをクリック<br />3.クリップしたい箇所を表示<br />4.「ハサミ」ボタンをクリック<br />5.クリップしたい部分をドラッグ<br />6.右クリックで「クリップ」をクリック<br /><br />※クリップ中、バー部分を右クリックで「更新」可能<br /><br />次回はオートアップデートについて書きたいと思います。<br /><br /><br />
<p></p>
<p><strong>関連記事</strong><br /></p>
<blockquote><a href="http://ua-labo.com/entries/pid000009.html">>プロとして恥ずかしくないActionScript 3.0の大原則</a><br />
<a href="http://ua-labo.com/entries/pid000019.html">>クリップウィンドウ　その二</a></blockquote>]]></description>
<link>http://www.ua-labo.com/#/pid000010</link>
<pubDate>Tue, 31 Mar 2009 15:37:49 +0900</pubDate>
</item>

<item>
<title>EmEditorのActionScript構文ファイル</title>
<category>ACTIONSCRIPT,FLASH,OTHERS</category>
<description><![CDATA[<p>最初の投稿記事となりますが、エディターの構文ファイルねたです。</p>
<p>ActionScriptのエディターとしてFlashDeveloperが代表的ですが、私はEmEditorを使っています。<br />多分UAでも数少ないコアユーザーです。。<br />当然ながら、FlashDeveloperほどActionScriptに特化した機能はないですが、エディターとして<br />純粋に好きで使っていますｗ。</p>
<p>別にEmEditorだから出来る！というわけではないですが、強調文字の設定はコダワリがあります。<br />（↓は実際の表示画面）</p>
<p>
<p><img class="mt-image-none" height="330" alt="090331_02.jpg" src="http://ua-labo.com/images/akuze/090331_02.jpg" width="550" /></p>
<p>
<p>強調文字を設定できる構文ファイルをアップしたので興味のある方はお試しあれ。</p>
<p>
<p>
<span class="mt-enclosure mt-enclosure-file" style="DISPLAY: inline">⇒<a href="http://ua-labo.com/images/akuze/actionscript.lzh">ActionScriptのEmEditorの構文ファイル</a></span></p>
<p>
<p>
<span class="mt-enclosure mt-enclosure-file" style="DISPLAY: inline">設定の仕方</span></p>
<ul>
<li>ダウンロードしたactionscript.lzhを解凍すると以下2つのファイルがあります。 
<ol>
<li>actionscript.ESY</li>
<li>actionscript.eetheme</li></ol></li>
<li>とりあえず自分のASファイルをEmEditorを開きます。</li>
<li>[ツール]⇒[設定の選択]⇒[設定の定義]</li>
<li>[設定の定義]ウィンドウが開いたら[新規作成]⇒[規定の設定を使用]にチェックして[OK]</li>
<li>名前を適当に入れてください（例えば「actionscript」など）。</li>
<li>作成した設定を選択して[プロパティ]を開きます。</li>
<li>[強調（1）]タブを選択して先ほどダウンロードした「actionscript.ESY」をインポートしてください。<br />（↓こんな感じ）<br />
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><img class="mt-image-none" height="363" alt="090331_03.jpg" src="http://ua-labo.com/images/akuze/090331_03.jpg" width="491" /></span></li>
<li>次に[表示]タブを選択してテーマをインポートします。<br />※既に自作テーマを設定されている方はactionscript.eethemeの[ActionScript]部分だけを追加してください。<br />
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><img class="mt-image-none" height="363" alt="090331_04.jpg" src="http://ua-labo.com/images/akuze/090331_04.jpg" width="491" /></span></li></ul>
<p>&nbsp;</p>
<p>これで出来上がりです。<br />後は[単語補完] プラグインを使うとFlashの「コードヒント」のように補完できたりするので便利ですよ。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000014</link>
<pubDate>Tue, 31 Mar 2009 11:50:22 +0900</pubDate>
</item>

<item>
<title>U/A自動化倶楽部　Vol1 PhotoShopのレイヤーをPNGに書き出す</title>
<category>FLASH,JAVASCRIPT,PHOTOSHOP</category>
<description><![CDATA[<p>はじめまして、こんにちは！<br />考えるよりも手を動かす系のディベロッパーKnockKnockです。<br />クリエイティブな仕事って思われますが、皆さんも感じているように非常に地味な作業が多いこの業界。<br />せっかくPC使ってるんだから、地味な作業はPCに任せてしまいましょう。<br />というわけでU/A自動化倶楽部と題してこれから様々な自動化ツールを開発していこうと思います。</p>
<p>案外知られていないの機能ですがPhotoshopでスクリプト使用することができます。<br />使用できるスクリプトはVBScript、AppleScript、JavaScriptの３つがあります。<br />その中でもWindowsとMACの両方で対応できるJavaScripを使っていわゆるバッチ処理を行わせたいと思います。</p>
<p>今回はPhotoShopからFlash用の素材としてのPNGを書き出すスクリプトです。&nbsp;</p>
<p>
<span class="mt-enclosure mt-enclosure-file" style="DISPLAY: inline"><a href="http://ua-labo.com/archive/knockknock/knockknock090331.lzh">knockknock090331.lzh</a></span></p>
<p>使用方法</p>
<ol>
<li>まず、PhotoShopで以下のようにグループ、レイヤーを整理してそれぞれ名前を付けます。<br />
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><img class="mt-image-none" height="605" alt="image1.jpg" src="http://ua-labo.com/images/knockknock/image1.jpg" width="392" /></span><br /><br /></li>
<li>次に、書き出したいPhotoShopをアクティブにした状態でJavaScriptを実行します。<br />実行方法は、ファイル＞スクリプト＞参照<br />実行途中「マージン」を設定することで画像の端に透明ピクセルを設けることができます。<br />
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><img class="mt-image-none" height="637" alt="image0.jpg" src="http://ua-labo.com/images/knockknock/image0.jpg" width="534" /></span><br /><br /></li>
<li>自動処理が完了するとPSDと同階層にPSD名と同名のディレクトリが作成されます。<br />
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><img class="mt-image-none" height="89" alt="image2.jpg" src="http://ua-labo.com/images/knockknock/image2.jpg" width="160" /></span><br /><br /></li>
<li>書き出し結果は以下のようにPSD内のグループがディレクトリに、レイヤーがPNGファイルに書き出されます。<br />
<span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"><img class="mt-image-none" height="195" alt="image3.jpg" src="http://ua-labo.com/images/knockknock/image3.jpg" width="263" /></span><br /><br /></li></ol>
<p>といった流れになります。</p>
<p>書き出す用にPSDファイルを整理する必要はありますが、<br />いっぺんに書き出せるのはとても便利だと思いますので是非ご活用ください。</p>
<p>次回も何かしらご紹介していきますのでお待ちください。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000015</link>
<pubDate>Tue, 31 Mar 2009 11:08:18 +0900</pubDate>
</item>

<item>
<title>Loaderの使いまわしについて</title>
<category>ACTIONSCRIPT</category>
<description><![CDATA[ついにオープンしたUA-LABO！<br />どうもchikathreesixです。<br /><br />AS3でloaderをクラスのプロパティに持って使いまわす際にハマったので書いておきます。<br /><br />まず以下ソースは一度画像を読み込んで表示し、３秒後にまた別の画像を読み込んで表示するプログラムです。<br />これを実行すると、loaderのloadメソッドを実行する際に「ArgumentError: Error #2025: 指定した DisplayObject は呼び出し元の子でなければなりません。」というエラーが出てしまいます。 <pre class="actionscript" name="code">public class LoaderTest extends Sprite 
{
	private var _loader:Loader;
	private var _img:DisplayObject;
		
		
	public function LoaderTest() {
		_loader = new Loader();
		_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, _loadedImg);
		_loader.load(new URLRequest("sample1.jpg"));
			
			
		var timer:Timer = new Timer(3000, 1);
		timer.addEventListener(TimerEvent.TIMER_COMPLETE, _completeAction);
		timer.start();
	}
		
		
	private function _loadedImg(e:Event):void
	{
		_img = _loader.content;
		addChild(_img);
	}
		
		
	private function _completeAction(e:TimerEvent):void {			
		_loader.load(new URLRequest("sample2.jpg"));
	}
}</pre><br />まず簡単な解決法は以下の二つになります。<br />①_loader.contentをaddChildせずにloaderをaddChildする。<br />②_loader.load()を実行する前に、_loader = new Loader()として、インスタンスを生成しなおす。<br /><br />ですが、loaderのcontentプロパティを抜き出していろいろ操作したい場合①の解決法は使えず、②の解決法ではインスタンスを生成し直してしまうので、あまり良いとは思えません。<br /><br />インスタンスを生成し直すとうまくいくということなので、とりあえずunloadしてみました。 <pre class="actionscript" name="code">private function _loadedImg(e:Event):void
{
			
	_img = _loader.content;
	_loader.unload();
	addChild(_img);
}</pre>なんとあっさりうまくいきました。以下TAKAIW先生による考察です。<br />&nbsp;<br /><b>考察①：</b>loadメソッド内でloaderのcontentプロパティがremoveChildされていて、それに対して「ArgumentError: Error #2025: 指定した DisplayObject は呼び出し元の子でなければなりません。」というエラーが出ているのではないか。<br />イメージで言うと以下のような感じでしょうか。 <pre class="actionscript" name="code">public class Loader extends DisplayObjectContainer{
	...
	public load(request:URLRequest, context:LoaderContext = null):void 
		if(this.content != null &amp;&amp; this.contains(this.content)) this.removeChild(this.content);
		...
	}
}</pre>おそらく読み込みが完了した時点でloaderはcontentプロパティを自身にaddChildするのでしょう。なので、loaderを使用するクラスでloader自身をaddChildする場合や、addChildをまったく行わない場合はランタイムエラーが出ないものと思われます。<br /><br /><br /><b>考察②：</b>unloadでは何らかの初期化処理とremoveChildが行われているのではないか。<br /><br />実際以下のようにすると同様のエラーが出てしまいます。 <pre class="actionscript" name="code">private function _loadedImg(e:Event):void
{		
	_img = _loader.content;
	addChild(_img);
	_loader.unload();
}</pre>これもおそらくcontentプロパティをremoveChildする際にエラーがでているのではないでしょうか。しかしこの場合このあとのloadはきちんと実行されています。ということは、何らかの初期化処理はremoveChildの前に行われているのではないかという推測ができます。<br />そこでTAKAIW先生より目から鱗アドバイス。<br />「try-catchしてみ」<br />やってみます。 <pre class="actionscript" name="code">private function _loadedImg(e:Event):void
{	
	_img = _loader.content;
	addChild(_img);
			
	try {
		loader.unload();
	}catch (e) {
	}
}</pre>できました。。なぜ？？ <br />TAKAIW先生「removeChildでthrowされるから最初の初期化処理はうまくいくんだよ」<br />なるほど、ということで何らかの初期化処理がされてから、removeChildされているということがわかりました。<br />try-catchはあまり使ってませんでしたが、その利便性に驚かされました。<br />これからはどんどん使いたいですね。<br /><br />最後に、これだけ長々と書きましたがなんとCS4ではランタイムエラーが出ずにうまくいってしまいます。というのもplayer10だとうまくいくからみたいです。<br />ということは、CS4で作っててなにも問題ないプログラムがplayer9の環境で見ると突然動かなくなるという可能性がある、ということですね。<br />今回の事例のようなものが他にもあると考えると、気をつける必要がありそうですね。<br /><br />]]></description>
<link>http://www.ua-labo.com/#/pid000013</link>
<pubDate>Wed, 25 Mar 2009 19:10:42 +0900</pubDate>
</item>

<item>
<title>プロとして恥ずかしくないActionScript 3.0の大原則</title>
<category>ACTIONSCRIPT,AIR,FLASH</category>
<description><![CDATA[<p>原稿書きました。</p>
<p>「第4章　ActionScript 3.0によるWebコンテンツ」の<br />「4-4 AIRのHTMLレンダリングを使ったガジェット」です。</p>
<p>この前のAdobe MAXでも<br />おされまくっていたAIRですが<br />基本的な作り方から、配布の仕方まで<br />一通りおさえてあります。</p>
<p>特に自分のところにお金が入るわけではないですが<br />皆さん買ってください!</p>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/484436040X/bulletboy-22/ref=nosim" target="_blank"><img height="160" alt="プロとして恥ずかしくないActionScript 3.0の大原則" src="http://rcm-images.amazon.com/images/P/484436040X.09.MZZZZZZZ.jpg" width="121" /></a><br /><a href="http://www.amazon.co.jp/exec/obidos/ASIN/484436040X/bulletboy-22/ref=nosim" target="_blank">>プロとして恥ずかしくないActionScript 3.0の大原則</a></p>
<p><br /></p>
<p></p>
<p><strong>関連記事</strong><br /></p>
<blockquote><a href="http://ua-labo.com/entries/pid000010.html">>クリップウィンドウ　その一</a><br />
<a href="http://ua-labo.com/entries/pid000019.html">>クリップウィンドウ　その二</a></blockquote>]]></description>
<link>http://www.ua-labo.com/#/pid000009</link>
<pubDate>Mon, 16 Mar 2009 15:47:03 +0900</pubDate>
</item>

<item>
<title>グローバル・モディファイアの利用で清廉潔白なテンプレートを</title>
<category>MOVABLETYPE</category>
<description><![CDATA[<p>『U/A LABO,ver.COA』やっとこオープンに漕ぎ着けることができましたね。<br />もともと弊社のインタラクション・ディベロッパーの中から自発的且つ必然的に浮かび上がったアイデアがカタチになったものでしたが、開発途中にワタクシも参加させていただき、MovableType開発等々で尽力させていただいたわけです。</p>
<p>色々書きたいことが溜まっていますが、最近感じたことから。</p>
<p style="COLOR: #c00"><strong>■グローバル・モディファイア </strong></p>
<p>MovableTypeには数多くの『グローバル・モディファイア』が存在しており、テンプレートタグの中で属性として配置することで、テンプレート構築を色々と手助けしてくれます。</p>
<p>▼参考リンク：<a href="http://www.movabletype.jp/documentation/appendices/modifiers/" target="_blank">グローバル・モディファイアリファレンス</a></p>
<p>中でも多く使用されるのが</p>
<ul>
<li>replace</li>
<li>setvar</li></ul>
<p>あたりでしょうか。<br />replaceモディファイアについて言えば</p><pre class="xhtml" name="code">&lt;mt:EntryLink replace="foo","bar" /&gt;
&nbsp;&nbsp;
</pre>
<p>といった使い方が可能なので、</p><pre class="xhtml" name="code">&lt;mt:EntryLink replace="http://ua-labo.com/","/" /&gt;
&nbsp;&nbsp;
</pre>
<p>のようにリンク記述をフルパスから、ドキュメントルート基準のパスに変更できたりします。<br />一見するとかなり地味なことに思えますが、ステージングサーバにMovableTypeが設置されていて、最終的にサーバ間で差分ファイルのみを引き渡して表示させる場合に無駄な処理を入れることなく記述を変更することができます。</p>
<p>中には『URLの表示をフルパスから変換する』という名目で<a href="http://www.skyarc.co.jp/engineerblog/entry/urlabs2rel.html" target="_blank">Abs2Rel</a>だったりとか、<a href="http://code.as-is.net/public/wiki/MTTruncateURL_Plugin" target="_blank">MTTruncateURL</a>といった優秀なプラグインが配布されていて、URLのリプレイスだけであればreplaceモディファイアを使用する必要が無かったりもします。</p>
<p>ただし、インデックステンプレート／アーカイブテンプレート／テンプレートモジュールと横断した形でお互いが依存したテンプレート構造且つ、再構築のタイミング次第でうまくリプレイスが行われなかったりした場合等に最終手段としてreplaceモディファイアを使用することがあります。</p>
<p>というかつい先日、まさに同様の処理を行う必要があったのでまぁ覚書程度に。</p>
<p>ここまでだと単純にURL置き換えだけにしか使えないようにも思えますが、むしろ使用方法としては前述のパターンはあくまでも局地的というか、実際には</p>
<ul>
<li>置換リストを変数群としてテンプレートモジュール辺りで保持しておいて、一斉トンマナ置換</li>
<li>正規表現との組み合わせによってコードの一貫性を保つためのフィルタ</li></ul>
<p>辺りをカスタマイズ次第で実装することができる、非常に強い味方と言えるのではないでしょうか。</p>
<p>とはいえコレに頼りすぎてると思考のゆとり化が進んでしまって、『テンプレート構築ってレベルじゃねーぞｗｗｗｗｗ』ってことになるので、あくまでも正攻法で組むことを考えつつ、方法論の一つとして考えておくのが吉かと。</p>
<p>setvarモディファイアについて言えば4.1以降でそのまんま、</p><pre class="xhtml" name="code">&lt;ul&gt;
&lt;mt:Entries lastn="5" setvar="last5"&gt;
&lt;li&gt;&lt;mt:EntryLink /&gt;&lt;/li&gt;
&lt;/mt:Entries&gt;
&lt;/ul&gt;
&nbsp;&nbsp;
</pre>
<p>こんなに短く書けますよ、っていうことで少しでもテンプレートのコードを短くキレイにアーバンな感じに整えてくれます。</p>
<p>とまぁ色々書いてきましたけれども、MovableTypeについてはこれからあまり多く書いていく心算はなく、どちらかと言えばFlash（ActionScript）にチャレンジしていきたいなと考えているわけです。</p>
<p>というわけで皆さん、よろしくお願いいたします。</p>]]></description>
<link>http://www.ua-labo.com/#/pid000007</link>
<pubDate>Fri, 13 Mar 2009 20:59:07 +0900</pubDate>
</item>
</channel>
</rss>
