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

<channel>
	<title>pekolog</title>
	<atom:link href="http://b-o-w.jp/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://b-o-w.jp/blog</link>
	<description></description>
	<pubDate>Wed, 24 Feb 2010 13:45:13 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
	<language>ja</language>
			<item>
		<title>PAC-MAN30thサイトリリースしました</title>
		<link>http://b-o-w.jp/blog/2010/02/23/pac-man30th/</link>
		<comments>http://b-o-w.jp/blog/2010/02/23/pac-man30th/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 08:05:54 +0000</pubDate>
		<dc:creator>naoko</dc:creator>
		
		<category><![CDATA[work]]></category>

		<category><![CDATA[PAC-MAN]]></category>

		<guid isPermaLink="false">http://b-o-w.jp/blog/?p=999</guid>
		<description><![CDATA[随分前になりますが、1/29にPAC-MANサイトをデザイン＋コンテンツを新たにグランドオープンしました。

http://pacman.com/ja/index.html
トップページで縦横無尽に動いているパックマンや [...]]]></description>
			<content:encoded><![CDATA[<p>随分前になりますが、1/29にPAC-MANサイトをデザイン＋コンテンツを新たにグランドオープンしました。</p>
<p><a href="http://pacman.com/ja/index.html"><img class="alignnone size-medium wp-image-1008" title="pac-man" src="http://b-o-w.jp/blog/wp-content/uploads/pac-man-206x300.jpg" alt="" width="206" height="300" /></a></p>
<p><a href="http://pacman.com/ja/index.html">http://pacman.com/ja/index.html</a></p>
<p>トップページで縦横無尽に動いているパックマンやゴーストたちは、javascriptで動いています。</p>
<p>パックマンはユーザーのマウス位置に向かってやってきます。もちろんパワークッキーを食べると、ゴーストたちはいじけ状態になりますよ。</p>
<p>BOWでは珍しく、サイト制作だけではなく、全体の企画・編集もやっています。</p>
<p>パックマン30周年の年表が見られる「MUSEUM」。パックマンに精通している方々の対談が掲載されている「INTERVIEW」。アーティストに依頼してパックマンワールドを再構築していただいている「ART」など、是非お楽しみください。</p>
<p>トップページの制作は、<a href="http://zerobase.jp">ゼロベース</a>の米谷さんとdotimpactの愛称でも知られている<a href="http://collisions.doppac.cc/">田中孝太郎</a>さん。<br />
サイトのデザインを手がけてくれたのは、ぬいぐるみ作家でもある<a href="http://www.monyomonyo.net/">坂上綾</a>さん。<br />
パックマンについての情報やネタを細かく調べ、サイト全てのテキストを書いてくれたのは<a href="http://twitter.com/tagkaz">田口和裕</a>さん。<br />
INTERVIEWやMUSEUMの写真を撮影してくれ岩谷さんと有野さんの素敵なショットを撮ってくれたのは、「ゆかい」の池田さん。多田さん。後藤さん。<br />
MUSEUMのながーいながーい年表をコーディングしてくれたのは、BOWの吉川。<br />
全ての静的ページをコーディングしてくれたのは、BOWの宮本。<br />
今後、更新されていくMUSEUM内のゲームプレイ動画を編集してくれてるのは、BOWの細金です。</p>
<p>これからもパックマンをお楽しみに！</p>
]]></content:encoded>
			<wfw:commentRss>http://b-o-w.jp/blog/2010/02/23/pac-man30th/feed/</wfw:commentRss>
		</item>
		<item>
		<title>お正月なのでUstreamをGoogle マップ上に表示してみた</title>
		<link>http://b-o-w.jp/blog/2010/01/08/ustreammap/</link>
		<comments>http://b-o-w.jp/blog/2010/01/08/ustreammap/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 13:34:49 +0000</pubDate>
		<dc:creator>key</dc:creator>
		
		<category><![CDATA[dev]]></category>

		<category><![CDATA[flash]]></category>

		<category><![CDATA[Google Maps]]></category>

		<category><![CDATA[Ustream]]></category>

		<guid isPermaLink="false">http://b-o-w.jp/blog/?p=938</guid>
		<description><![CDATA[あけましておめでとうございます。
おかげさまでBOWは新しい年を迎えることができました。本年もよろしくお願いいたします。
さて、僕はお正月にUstreamで色々遊んでたんですが、こんなものができましたのでブログに書いてみ [...]]]></description>
			<content:encoded><![CDATA[<p>あけましておめでとうございます。</p>
<p>おかげさまでBOWは新しい年を迎えることができました。本年もよろしくお願いいたします。</p>
<p>さて、僕はお正月にUstreamで色々遊んでたんですが、こんなものができましたのでブログに書いてみます。<br />
<div id="attachment_991" class="wp-caption aligncenter" style="width: 509px"><a href="http://b-o-w.jp/labs/ustream/map/" target="_blank"><img src="http://b-o-w.jp/blog/wp-content/uploads/ustreammap.png" alt="UstreamMap" title="UstreamMap" width="499" height="297" class="size-full wp-image-991" /></a><p class="wp-caption-text">UstreamMap</p></div></p>
<h3>これは何？</h3>
<p><a href="http://developer.ustream.tv/data_api/docs">UstreamのData API</a>を使って最新のストリームを取得し、それらのうちGPS情報が取得できるものだけをGoogle マップ上に表示してます。</p>
<p>眺めているだけでも楽しいですが、<a href="http://www.ustream.tv/mobile/broadcaster">Ustream Live Broadcaster</a>を使ってマップ上に参加することもできます。これを使って色々面白い遊びができそうです。</p>
<p><span id="more-938"></span></p>
<h3>何で作った？</h3>
<p>大晦日に、Ustreamの新着をTwitterから拾って並べるものを作ったのですが</p>
<div class="twitter">
<div class="tweet" style="border-bottom: 1px solid rgb(204, 204, 204); padding: 3px;">
<div class="avatar" style="float: left;"><img src="http://a1.twimg.com/profile_images/15203092/akuma48_normal.jpg" style="width: 30px; height: 30px;"/></div>
<div class="text" style="margin-left: 33px;"><a class="user" href="http://twitter.com/psyark">psyark</a> <span>最近Twitterに流れた新着Ustを並べて表示。いろんな新年をお楽しみください RT <a href="http://twitter.com/_maki" target="_blank">@_maki</a>  : <a href="http://twitter.com/psyark" target="_blank">@psyark</a> おお、なんぞこれ</span>
<div class="date" style="font-size: 80%;"><a href="http://twitter.com/psyark/status/7237072160">2010/01/01 00:29:26</a></div>
</div>
</div>
<div class="tweet" style="border-bottom: 1px solid rgb(204, 204, 204); padding: 3px;">
<div class="avatar" style="float: left;"><img src="http://a1.twimg.com/profile_images/512582882/panda_normal.jpg" style="width: 30px; height: 30px;"/></div>
<div class="text" style="margin-left: 33px;"><a class="user" href="http://twitter.com/_maki">_maki</a> <span><a href="http://twitter.com/psyark" target="_blank">@psyark</a> おお、なんぞこれ</span>
<div class="date" style="font-size: 80%;"><a href="http://twitter.com/_maki/status/7237001902">2010/01/01 00:27:13</a></div>
</div>
</div>
<div class="tweet" style="border-bottom: 1px solid rgb(204, 204, 204); padding: 3px;">
<div class="avatar" style="float: left;"><img src="http://a1.twimg.com/profile_images/15203092/akuma48_normal.jpg" style="width: 30px; height: 30px;"/></div>
<div class="text" style="margin-left: 33px;"><a class="user" href="http://twitter.com/psyark">psyark</a> <span>プログラ初め <a href="http://psyark.jp/labs/ustreeeeam/" target="_blank">http://psyark.jp/labs/us&#8230;</a> （どんどこ書き換え中）</span>
<div class="date" style="font-size: 80%;"><a href="http://twitter.com/psyark/status/7236855485">2010/01/01 00:22:34</a></div>
</div>
</div>
<div class="tweet" style="border-bottom: 1px solid rgb(204, 204, 204); padding: 3px;">
<div class="avatar" style="float: left;"><img src="http://a1.twimg.com/profile_images/15203092/akuma48_normal.jpg" style="width: 30px; height: 30px;"/></div>
<div class="text" style="margin-left: 33px;"><a class="user" href="http://twitter.com/psyark">psyark</a> <span>00:00:00聞きながらコード書いてアドレナリン出てる状態で年越せた。今年もよろしくお願いします。</span>
<div class="date" style="font-size: 80%;"><a href="http://twitter.com/psyark/status/7236132793">2010/01/01 00:01:22</a></div>
</div>
</div>
</div>
<p><a href="http://psyark.jp/labs/ustreeeeam/" target="_blank">ustreeeeam</a> （重いです）</p>
<p>これを元日に見てたところ、</p>
<div class="twitter">
<div class="tweet" style="border-bottom: 1px solid rgb(204, 204, 204); padding: 3px;">
<div class="avatar" style="float: left;"><img src="http://a1.twimg.com/profile_images/512582882/panda_normal.jpg" style="width: 30px; height: 30px;"/></div>
<div class="text" style="margin-left: 33px;"><a class="user" href="http://twitter.com/_maki">_maki</a> <span>いま、（Ust上の）アクティブな人たちがどこの国の人で何日の何時なのか知りたくなるなー。　<a href="http://psyark.jp/labs/ustreeeeam/" target="_blank">http://psyark.jp/labs/us&#8230;</a></span>
<div class="date" style="font-size: 80%;"><a href="http://twitter.com/_maki/status/7256172510">2010/01/01 11:38:15</a></div>
</div>
</div>
</div>
<p>じゃあ地図上に並べようということになったのでした。</p>
<h3>遊び方</h3>
<p>眺めて遊びます。誰かが位置情報を有効にした状態でUstreamを始めると、しばらくして地図上に現れます。（Ustreamの混雑状況や同時閲覧者数により、出るのに時間がかかったり、取りこぼしたりするかもしれないです）</p>
<p>気になるストリームを見つけたら、Ustreamロゴを押せばチャンネルページへ飛べます。</p>
<p>iPhoneの<a href="http://www.ustream.tv/mobile/broadcaster" target="_blank">Ustream Live Broadcaster</a>を使う場合は、設定でSend locationを&#8221;Always&#8221;ではなく&#8221;Ask on startup&#8221;にしないと位置情報が有効にならないかも？という報告がありました。（検証中）</p>
<h3>仕組み</h3>
<p>位置情報を提供しているWebサービスとGoogle マップを組み合わせるのはマッシュアップの初歩の初歩ではありますが、今回はちょっと苦労しました。</p>
<p>大まかな動作の流れは以下のようになっています。</p>
<ol>
<li>Ustream　Data APIを使って新着ストリームを取得</li>
<li>Flashで順番に開いていき、位置情報を含むストリームを抜き出し</li>
<li>その位置情報をGoogle マップに渡してマップ上に表示してもらう</li>
</ol>
<p>ここで苦労したのは</p>
<ul>
<li>GPSに対応してるストリームがあんまり無い</li>
<li>GPSに対応してるか調べるのが面倒</li>
<li>ストリームの入れ替わりが激しい</li>
</ul>
<p>という点でした。</p>
<h3>GPSに対応してるストリームだけを集めるには</h3>
<p>結論から言うと、<a href="http://developer.ustream.tv/external/flash/" target="_blank">Ustream Runtime Shared Library</a>を使って総当りで調べる方法以外見つけていません。</p>
<p>最初のうちは「位置情報が使えるのはiPhoneなのだから、iPhoneからの配信だけ取得すれば良いのでは」と考えて<a href="http://twitter.com/#search?q=broadcasting%2C%20from%20my%20iPhone" target="_blank">Twitter検索</a>から取得しようとしてみましたが、意外と位置情報オフで使ってるユーザが多く、S/N比の向上はイマイチです。</p>
<p>そこで中途半端なフィルタリングは諦め、Ustream Data APIを使って新鮮なデータを自前で捌くことにしました。</p>
<h3>新鮮なストリームの入手方法</h3>
<p>Ustream Data APIでライブ中のストリームを得るには</p>
<ol>
<li>liveスコープを使う方法<br/>http://api.ustream.tv/html/channel/live/search/all</li>
<li>streamサブジェクトエリアを使う方法<br/>http://api.ustream.tv/html/stream/recent/search/all</li>
</ol>
<p>があり、ドキュメントでも比較が載っています。が分かりにくいので解説すると、まずこれらのAPIが検索する対象はchannelとstreamの違いがあります。</p>
<p>Ustreamを視聴してると経験があると思いますが、<a href="http://www.ustream.tv/channel/psyark" target="_blank">チャンネルページ</a>を開いていると放送が始まって、ブツッと切れて、放っておくとまたオンエアになったりします。これが「1つのチャンネルを見ていたら2つのストリームを受信した」状態です。二者の違いが分かりやすいのではないでしょうか。</p>
<p>前者のAPIは、channelサブジェクトのうちlive状態であるもの、つまりstreamが入っている状態のものを返します。このliveを指定することでオンエアの結果だけを得ることができます。</p>
<p>後者のAPIは、streamサブジェクトを新着ソートして返します。オフエア状態が存在するchannelと違い、streamの検索結果は全てオンエア状態です。（と言うのも変ですが）</p>
<p>imageUrlなど一部の情報はchannelを調べないと得られませんが、今回は必要ないので、新着ソートできる後者のAPIを使いました。</p>
<p>結果のフォーマットは、htmlの部分をxmlとかjsonとかに変更できます。</p>
<p>またDevelopperKeyを付加して呼び出す必要があります。詳しくは<a href="http://developer.ustream.tv/data_api/docs" target="_blank">ドキュメント</a>を見てください。</p>
<h3>ちなみに、Twitterを使ったストリームの入手方法</h3>
<p><a href="http://twitter.com/#search?q=ustre.am" target="_blank">ustre.amで検索</a>するとたくさん引っかかります。</p>
<p>HTML埋め込みやFlashで再生するにはcidを取得する必要がありますが、（もちろん上記URLをスクレイピングしても良いのですが）もっと簡単な方法があります。</p>
<p>ustre.am/ に続く3～4桁の英数字は単なるcidの62進数表記なので、簡単な計算式で相互変換できます。</p>
<p>簡単なコードを書いておきますね。</p>
<div class="codecolorer-container actionscript"><div class="codecolorer" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="kw3">private</span> <span class="kw3">static</span> const table:<span class="kw3">String</span> = <span class="st0">&quot;0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;</span>;</div></li>
<li class="li1"><div class="de1"><span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">function</span> getUrlFromCid<span class="br0">&#40;</span>cid:uint<span class="br0">&#41;</span>:<span class="kw3">String</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> <span class="kw3">url</span>:<span class="kw3">String</span> = <span class="st0">&quot;&quot;</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>cid<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">url</span> = table.<span class="kw3">charAt</span><span class="br0">&#40;</span>cid % <span class="nu0">62</span><span class="br0">&#41;</span> + <span class="kw3">url</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; cid /= <span class="nu0">62</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="st0">&quot;http://ustre.am/&quot;</span> + <span class="kw3">url</span>;</div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1"><span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">function</span> getCidFromUrl<span class="br0">&#40;</span><span class="kw3">url</span>:<span class="kw3">String</span><span class="br0">&#41;</span>:uint <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> id:<span class="kw3">String</span> = <span class="kw3">url</span>.<span class="kw3">split</span><span class="br0">&#40;</span><span class="st0">&quot;/&quot;</span><span class="br0">&#41;</span>.<span class="kw3">pop</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> cid:uint = <span class="nu0">0</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i:<span class="kw3">int</span>=<span class="nu0">0</span>; i&lt;id.<span class="kw3">length</span>; i++<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; cid += table.<span class="kw3">indexOf</span><span class="br0">&#40;</span>id.<span class="kw3">charAt</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span><span class="br0">&#41;</span> * <span class="kw3">Math</span>.<span class="kw3">pow</span><span class="br0">&#40;</span><span class="nu0">62</span>, id.<span class="kw3">length</span> - i - <span class="nu0">1</span><span class="br0">&#41;</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> cid;</div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></div></div>
<h3>ストリームが位置情報に対応しているか調べるには</h3>
<p>Ustream Runtime Shared Libraryを使いました。</p>
<p>基本的な使い方は<a href="http://txton.net/hoehoe/2009/091210001224.html" target="_blank">Flash : Ustream Flash Client APIを使ってみる - SWFなカスタムパネルで中継を再生</a>が参考になりました。</p>
<p>位置情報を取得するには、</p>
<ol>
<li>logicを作る（上記参照）</li>
<li>logicの&#8221;createChannel&#8221;イベントを見張る</li>
<li>logic.channelにアクセスできるようになるので取っておく</li>
<li>channelの&#8221;online&#8221;イベントを見張る</li>
<li>channel.modulesにアクセスできるようになるので取っておく</li>
<li>modulesの&#8221;createGps&#8221;イベントを見張る</li>
<li>modules.gpsにアクセスできるようになるので取っておく</li>
<li>gpsの&#8221;update&#8221;イベントを見張る</li>
<li>gpsのcountry, city, latitude, longitude, altitudeが取得できる</li>
</ol>
<p>という手順になります。</p>
<p>ただしこのままでは「位置情報に対応していない」というゴールが無いので、適切なタイムアウトを設けてやります。僕の環境では平均して600ミリ秒ぐらいで位置情報に辿り着けましたが、ストリーミングを複数同時に見るというアプリケーションの性質上、十分な余裕を見て2000ミリ秒に設定しています。</p>
<h3>余談</h3>
<p>上記<a href="http://developer.ustream.tv/external/flash/tv/ustream/viewer/logic/modules/Gps.html#eventSummary" target="_blank">GPSクラスのASDoc</a>に</p>
<dl>
<dt>Event</dt>
<dd>（空欄）</dd>
<dt>Summary</dt>
<dd>Fires when the gps informations are available.</dd>
</dl>
<p>って書いてあって絶望しました。</p>
<p>でたらめに色々入れてみてdataだと分かりましたが。</p>
<h3>常にストリームが表示されるようにするには</h3>
<p>Ustreamから大量のストリームを取得する方法と、そこから位置情報つきストリームを選別する方法は分かりました。</p>
<p>しかし、実際に組み合わせてみると、なかなか位置情報つきストリームに出会えません。作って間もないので統計を取っていないので僕の感覚なのですが、位置情報を有効にしているストリームは全体の1～2%程度しかいないようです。</p>
<p>1つ解析するのに2秒かかるシステムでは厳しそうなので、サーバ側にデータベースを用意することで、各ストリームの解析済み状態・位置情報・オンエア状態の管理を行うことにしました。</p>
<ol>
<li>まずサーバ側プログラムがData APIを使って新着ストリームを100件受信します。それらはDB上の「未解析リスト」に加えられます。</li>
<li>Flashクライアントがサーバから「未解析リスト」のうち10件を受け取ります。</li>
<li>Flashクライアントは2秒に一つ、上記リストを処理し、「位置情報の有無」「オフエアになったか」を報告します。</li>
<li>サーバは結果を受け取り、オフエアの場合はDBから削除し、そうでない場合は「位置情報有りリスト」か「位置情報無しリスト」に分類します。</li>
<li>Flashクライアントがサーバから「未解析リスト」のうち新しい10件を受け取ります。また、「位置情報有り」リストがあればそれも受け取ります。</li>
</ol>
<p>という仕組みのおかげで、ページを開いてすぐに位置情報有りのストリームが再生できるようになりました。</p>
<p>実際にはもう少し複雑で、</p>
<ul>
<li>Data APIから再び取得した際に「位置情報無しリスト」にあるものは無視する</li>
<li>ただし一旦途切れて別のストリームになっていた場合（放送開始時間が新しい場合）は再度「未解析リスト」に戻す</li>
<li>Flashクライアントが複数同時に起動した際に効率良くストリームをチェックできるように、未解析リストから各自に別々のストリームを渡す。</li>
</ul>
<p>などの工夫も入れています。</p>
<h3>制作時間</h3>
<p>1/6と1/7の深夜に6時間ずつぐらい。</p>
<h3>感想</h3>
<p>新年から楽しいものを作れて嬉しいです。今年はこういうアウトプットを増やしていきたい。</p>
<p>と言うわけで、今年もよろしくお願いします。</p>
]]></content:encoded>
			<wfw:commentRss>http://b-o-w.jp/blog/2010/01/08/ustreammap/feed/</wfw:commentRss>
		</item>
		<item>
		<title>iPhoneで無限Ustream</title>
		<link>http://b-o-w.jp/blog/2009/12/14/iphone%e3%81%a7%e7%84%a1%e9%99%90ustream/</link>
		<comments>http://b-o-w.jp/blog/2009/12/14/iphone%e3%81%a7%e7%84%a1%e9%99%90ustream/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 15:25:41 +0000</pubDate>
		<dc:creator>hsgn</dc:creator>
		
		<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://b-o-w.jp/blog/?p=936</guid>
		<description><![CDATA[
iPhoneからUstreamが放送できるUstreamLiveBroadcasterが発表され、TwitterのTLはUstreamで溢れ返っていますが、このアプリによるUstreamがどこまで実用的なのかを実験して [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>iPhoneからUstreamが放送できる<a href="http://www.ustream.tv/mobile/broadcaster">UstreamLiveBroadcaster</a>が発表され、TwitterのTLはUstreamで溢れ返っていますが、このアプリによるUstreamがどこまで実用的なのかを実験してみました。</p>
<p>僕のiPhoneは3GSではなく、旧型の3Gです。最初行った実験は</p>
<p><strong>・液晶明度最低<br />
・Wi-Fi接続<br />
・AC-USBアダプタ接続<br />
・バッテリーは100%<br />
・SoftBankアンテナ5本</strong></p>
<p>というような環境で行いました。<br />
AC-USBアダプタ接続なのは、PCのUSBポートは制限があり、一定以上の電流を流すことができないためです。</p>
<p>作業の様子をUstreamで延々と流し続けた結果、3時間ほどでバッテリーが20%を切ったという警告が出て、3時間40分ほどで電池が力尽きました。バッテリーのヘタり具合は個体差があると思いますが、おおむね3時間は出来る、とみてよいかと思います。この時点でiPhoneを放置してライブカメラのように使うのは無理かと思われましたが、念のため次のような環境で再度実験を試みました。</p>
<p><strong>・液晶明度最低<br />
・Wi-Fi接続<br />
・AC-USBアダプタ接続<br />
・バッテリーは100%<br />
・SoftBankアンテナ5本<br />
・3Gをオフ</strong></p>
<p>3Gを切ったこと以外はまったく同じ条件ですが、基地局サーチへの電力消費を抑えた結果、連続7時間以上Ustreamを行えた上に、バッテリーが100%であったことから、<strong>無限Ustreamができることが分かりました。</strong><br />
これでフィールドUstreamの可能性がものすごく広がりますね。</p>
<p>3G接続の場合や、3GSによる実験は行っていませんが、もしご存知の方が居たら教えてください。</p></div>
]]></content:encoded>
			<wfw:commentRss>http://b-o-w.jp/blog/2009/12/14/iphone%e3%81%a7%e7%84%a1%e9%99%90ustream/feed/</wfw:commentRss>
		</item>
		<item>
		<title>curveToの仕組みと1日1Wonderfl</title>
		<link>http://b-o-w.jp/blog/2009/11/16/curveto_wonderfl/</link>
		<comments>http://b-o-w.jp/blog/2009/11/16/curveto_wonderfl/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 14:25:06 +0000</pubDate>
		<dc:creator>key</dc:creator>
		
		<category><![CDATA[flash]]></category>

		<category><![CDATA[curveTo]]></category>

		<category><![CDATA[gupon]]></category>

		<category><![CDATA[Point]]></category>

		<category><![CDATA[wonderfl]]></category>

		<guid isPermaLink="false">http://b-o-w.jp/blog/?p=907</guid>
		<description><![CDATA[BOW新メンバーのgupon君に聞かれたので、curveToの仕組みについてまとめてみます。
curveToの仕組み
「点Aから点Bへ向けてスタートし、点Cへ到達する曲線」をASでは
graphics.moveTo&#4 [...]]]></description>
			<content:encoded><![CDATA[<p>BOW新メンバーの<a href="http://twitter.com/gupon">gupon君</a>に聞かれたので、curveToの仕組みについてまとめてみます。</p>
<h3>curveToの仕組み</h3>
<p>「点Aから点Bへ向けてスタートし、点Cへ到達する曲線」をASでは</p>
<div class="codecolorer-container actionscript"><div class="codecolorer" style="font-family: monospace;"><ol><li class="li1"><div class="de1">graphics.<span class="kw3">moveTo</span><span class="br0">&#40;</span>a.<span class="me1">x</span>, a.<span class="me1">y</span><span class="br0">&#41;</span>;</div></li>
<li class="li1"><div class="de1">graphics.<span class="kw3">curveTo</span><span class="br0">&#40;</span>b.<span class="me1">x</span>, b.<span class="me1">y</span>, c.<span class="me1">x</span>, c.<span class="me1">y</span><span class="br0">&#41;</span>;</div></li></ol></div></div>
<p>と書くことができます。</p>
<p>では、この曲線はどのようなルールで描かれているのでしょうか？</p>
<p>この曲線が通過する点は、以下のルールを満たします。</p>
<p><em>線分ABを t : (1-t) に内分する点をD、<br />
線分BCを t : (1-t) に内分する点をE としたとき、<br />
線分DEを t : (1-t) に内分する点 （ただし、0 ≦ t ≦ 1 です）</em></p>
<p>実際に見てみましょう。</p>
<div style="text-align:center;width:465px;"><iframe title="flash on 2009-11-16 - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/68b3660df66beea1ce702b63c267d41fa7f39f98" width="465" height="490" style="border:1px black solid;"></iframe><a href="http://wonderfl.net/code/68b3660df66beea1ce702b63c267d41fa7f39f98" title="flash on 2009-11-16 - wonderfl build flash online">flash on 2009-11-16 - wonderfl build flash online</a></div>
<p>上記のルールで描いた丸が、ちょうど曲線の上に重なっています。</p>
<p>では、この仕組みを覚えると何に役立つでしょうか。</p>
<p><span id="more-907"></span></p>
<h3>応用1：曲線がだんだん伸びていくアニメーション</h3>
<p>点Aから点Cまで曲線が伸びていくアニメーションを作ってみます。</p>
<p>曲線の始点は点Aで固定なので、moveToの引数は自明です。問題はcurveToの引数、つまり移動する点Bと点Cです。</p>
<p>上記のルールを見てみると、tが大きくなると点Dは点Bに近づき、点Eは点Cに近づき、点Fは点Cに近づいています。つまり、tを徐々に増加させることで移動する点Cを得ることができそうです。</p>
<p>残るは移動する点Bですが、こちらは点Aから出て点Bへ向かう点、ということで試しに点Dをそのまま使ってみます。</p>
<div style="text-align:center;width:465px;"><iframe title="forked from: flash on 2009-11-16 - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/fcb7d6c78a205b2ead823c9fdb865352363bbc2e" width="465" height="490" style="border:1px black solid;"></iframe><a href="http://wonderfl.net/code/fcb7d6c78a205b2ead823c9fdb865352363bbc2e" title="forked from: flash on 2009-11-16 - wonderfl build flash online">forked from: flash on 2009-11-16 - wonderfl build flash online</a></div>
<p>と、動いてしまいました。</p>
<p>（点Bの移動はちゃんと計算で導くこともできますが、つまらないのでパスします）</p>
<h3>応用2：複雑な曲線を伸ばす</h3>
<p>複数のcurveToからなる曲線を、上記の方法で延ばしていきます。</p>
<p>配列に格納したそれぞれのPointをコントロールポイントとして使い、アンカーポイントには隣り合うPointの中点を使うのが滑らかに繋げる常套手段です。</p>
<div style="text-align:center;width:465px;"><iframe title="forked from: forked from: flash on 2009-11-16 - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/68cc98716a11bb6707e45434e7fa53e0f7e93d87" width="465" height="490" style="border:1px black solid;"></iframe><a href="http://wonderfl.net/code/68cc98716a11bb6707e45434e7fa53e0f7e93d87" title="forked from: forked from: flash on 2009-11-16 - wonderfl build flash online">forked from: forked from: flash on 2009-11-16 - wonderfl build flash online</a></div>
<p>さて、これらの方法を使って二人でWonderflに投稿してみました。</p>
<p>僕</p>
<div style="text-align:center;width:465px;"><iframe title="LightSketch (VS gupon) - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/623db4993fe440d0ed7f6c3965d095ed12634bdd" width="465" height="490" style="border:1px black solid;"></iframe><a href="http://wonderfl.net/code/623db4993fe440d0ed7f6c3965d095ed12634bdd" title="LightSketch (VS gupon) - wonderfl build flash online">LightSketch (VS gupon) - wonderfl build flash online</a></div>
<p>gupon</p>
<div style="text-align:center;width:465px;"><iframe title="LightSketch(psyark respection) - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/68080952a04c2257794d4643f6ddf3f17465c6bc" width="465" height="490" style="border:1px black solid;"></iframe><a href="http://wonderfl.net/code/68080952a04c2257794d4643f6ddf3f17465c6bc" title="LightSketch(psyark respection) - wonderfl build flash online">LightSketch(psyark respection) - wonderfl build flash online</a></div>
<p>gupon君にはこれから毎日Wonderflに投稿してもらおうと思っています。乞うご期待！</p>
]]></content:encoded>
			<wfw:commentRss>http://b-o-w.jp/blog/2009/11/16/curveto_wonderfl/feed/</wfw:commentRss>
		</item>
		<item>
		<title>BowDevice Defrag</title>
		<link>http://b-o-w.jp/blog/2009/11/09/bowdevice-defrag/</link>
		<comments>http://b-o-w.jp/blog/2009/11/09/bowdevice-defrag/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 09:07:33 +0000</pubDate>
		<dc:creator>makiko</dc:creator>
		
		<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://b-o-w.jp/blog/?p=900</guid>
		<description><![CDATA[

全力でひまつぶしてるサイトhttp://dailyvitamins.jp/
ここで、BowDeviceというのを作らせてもらっています。
すこし前に新作「Defrag」を作りましたのでご報告。
上記はdaily vi [...]]]></description>
			<content:encoded><![CDATA[<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="190" height="1024" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://b-o-w.jp/blog/wp-content/uploads/bowdevicedefrag2.swf" /><embed type="application/x-shockwave-flash" width="190" height="1024" src="http://b-o-w.jp/blog/wp-content/uploads/bowdevicedefrag2.swf"></embed></object></p>
<p><span id="more-900"></span></p>
<p>全力でひまつぶしてるサイト<a href="http://dailyvitamins.jp/">http://dailyvitamins.jp/</a><br />
ここで、BowDeviceというのを作らせてもらっています。</p>
<p>すこし前に新作「Defrag」を作りましたのでご報告。<br />
上記はdaily vitaminsで公開しているものとは違って没バージョン。これはこれで気に入ってます。</p>
]]></content:encoded>
			<wfw:commentRss>http://b-o-w.jp/blog/2009/11/09/bowdevice-defrag/feed/</wfw:commentRss>
		</item>
		<item>
		<title>DeskTopLive.xna ご来場ありがとうございました。</title>
		<link>http://b-o-w.jp/blog/2009/10/06/thankyou-for-desktoplive-xna/</link>
		<comments>http://b-o-w.jp/blog/2009/10/06/thankyou-for-desktoplive-xna/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 08:17:29 +0000</pubDate>
		<dc:creator>key</dc:creator>
		
		<category><![CDATA[DeskTopLive]]></category>

		<category><![CDATA[desktoplivexna]]></category>

		<category><![CDATA[XNA]]></category>

		<guid isPermaLink="false">http://b-o-w.jp/blog/?p=893</guid>
		<description><![CDATA[
といっても終了からかなり時間が空いてしまいました！

今回のテーマ「XNA」でイベントを開くにあたり、多くの方からご助言・ご協力をいただきました。中には「XNAを選ぶのはチャレンジングですね」という意見もありましたが、 [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" src="http://farm4.static.flickr.com/3444/3928284202_331db34820_o.jpg" alt="" width="576" height="432" /></p>
<p>といっても終了からかなり時間が空いてしまいました！</p>
<p><span id="more-893"></span></p>
<p>今回のテーマ「XNA」でイベントを開くにあたり、多くの方からご助言・ご協力をいただきました。中には「XNAを選ぶのはチャレンジングですね」という意見もありましたが、皆さんから共通していただけたのは、「自分のゲームを実機で動かせることがXNAの大きな楽しさ」ということ。</p>
<p>普段実際に開発されているゲームでのプレゼン大会や、制限時間の中で刻々と完成度が上がっていくライブプログラミングを通して、その楽しさを感じていただけてたら嬉しいです！</p>
<p>そして、この機会にXNAを始める人が増えてくれたらと思います。あまり難しくないですし、公式サイトで多くのサンプルコードも得られ、かなり良い環境です。ゲームを作りたいという夢を持っているかた（僕もですが）、ぜひ挑戦してみてください！<br />
終わって時間が空いてしまいましたが、その分後日レポートとして、出演者の方のお話、特にXNA GONGで15分ではなかなかお伝えしきれなかったことを、このブログでフォローしていければと思っていますので、お待ちくださいませ。</p>
<p>当日いらしてくれた方のブログのまとめをXNA Today様がされています。</p>
<p><a href="http://www.xna-today.jpn.org/archives/1282">http://www.xna-today.jpn.org/archives/1282</a></p>
<p>当日ご出演いただいたXELFさんのPDFは<br />
<a href="http://xelf.info/xna/event/XELF.DeskTopLive.xna_2009-09-12.pdf">http://xelf.info/xna/event/XELF.DeskTopLive.xna_2009-09-12.pdf</a><br />
こちらに上がっているようです。</p>
<p>あわせて、当日WEB中継をお手伝いいただいたgihyo.jp様の動画レポートも是非ご覧ください。</p>
<p><a href="http://gihyo.jp/news/report/2009/09/1401">http://gihyo.jp/news/report/2009/09/1401</a></p>
<p>BOWとしても、せっかくミニDTLでゲーム制作[謎]をスタートしたので、いつか完成させてみたいなーと思ったりもしています。<br />
DTL.XNA第二弾もいつかできるといいですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://b-o-w.jp/blog/2009/10/06/thankyou-for-desktoplive-xna/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ライブプログラミング中継</title>
		<link>http://b-o-w.jp/blog/2009/09/12/dtl02/</link>
		<comments>http://b-o-w.jp/blog/2009/09/12/dtl02/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 09:37:19 +0000</pubDate>
		<dc:creator>makiko</dc:creator>
		
		<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://b-o-w.jp/blog/?p=889</guid>
		<description><![CDATA[おまたせしました。
それぞれのライブプログラミングマシンの中継アドレスです。
http://www.livestream.com/dtl_aba
http://www.livestream.com/dtl_kougei
]]></description>
			<content:encoded><![CDATA[<p>おまたせしました。</p>
<p>それぞれのライブプログラミングマシンの中継アドレスです。</p>
<p><a href="http://www.livestream.com/dtl_aba">http://www.livestream.com/dtl_aba</a></p>
<p><a href="http://www.livestream.com/dtl_kougei">http://www.livestream.com/dtl_kougei</a></p>
]]></content:encoded>
			<wfw:commentRss>http://b-o-w.jp/blog/2009/09/12/dtl02/feed/</wfw:commentRss>
		</item>
		<item>
		<title>本日DeskTopLive.xnaです！</title>
		<link>http://b-o-w.jp/blog/2009/09/12/dtl0/</link>
		<comments>http://b-o-w.jp/blog/2009/09/12/dtl0/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 08:35:31 +0000</pubDate>
		<dc:creator>makiko</dc:creator>
		
		<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://b-o-w.jp/blog/?p=884</guid>
		<description><![CDATA[いよいよ今日DTL.xna開催です。
サイトのほうでもお知らせしていましたがWEB中継を行います。
↓こちらをチェック！おねがいします。
http://www.ustream.tv/channel/dtlive
Twit [...]]]></description>
			<content:encoded><![CDATA[<p>いよいよ今日DTL.xna開催です。</p>
<p>サイトのほうでもお知らせしていましたがWEB中継を行います。</p>
<p>↓こちらをチェック！おねがいします。<br />
<a href="http://www.ustream.tv/channel/dtlive" target="_blank">http://www.ustream.tv/channel/dtlive</a></p>
<p>Twitterでハッシュタグ<br />
#dtl</p>
<p>つけて発言していただけると、Ustからもひろえますので、どうぞー。</p>
<p>ただいま絶賛設営中ですが、うまくいけばライブプログラミングしているマシンからLive Streamも行えるかも・・・</p>
]]></content:encoded>
			<wfw:commentRss>http://b-o-w.jp/blog/2009/09/12/dtl0/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ミニDTL.xna “ゲームはイチニチ30分まで！” 第12回</title>
		<link>http://b-o-w.jp/blog/2009/09/07/mini-dtl-xna-12/</link>
		<comments>http://b-o-w.jp/blog/2009/09/07/mini-dtl-xna-12/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 06:01:38 +0000</pubDate>
		<dc:creator>key</dc:creator>
		
		<category><![CDATA[XNA]]></category>

		<category><![CDATA[dev]]></category>

		<category><![CDATA[DeskTopLive]]></category>

		<category><![CDATA[desktoplivexna]]></category>

		<category><![CDATA[MiniDTL]]></category>

		<guid isPermaLink="false">http://b-o-w.jp/blog/?p=820</guid>
		<description><![CDATA[ミニDTL.xnaその12です。
9/1に配信した分です。今回は、敵キャラの種類の追加と、自機のモデリングを行いました。

MiniDTL.xna (12)

敵の種類を作る
ずーっと飾り気のない敵1種類だったので、新し [...]]]></description>
			<content:encoded><![CDATA[<p>ミニDTL.xnaその12です。</p>
<p>9/1に配信した分です。今回は、敵キャラの種類の追加と、自機のモデリングを行いました。</p>
<p><span id="more-820"></span><br />
<a href="http://www.livestream.com/psyark/ondemand/flv_6111d9e4-9c01-457a-b035-4958e5e59cd4?initthumburl=http://mogulus-user-files.s3.amazonaws.com/chpsyark/2009/09/01/6111d9e4-9c01-457a-b035-4958e5e59cd4_1210.jpg&#038;playeraspectwidth=4&#038;playeraspectheight=3">MiniDTL.xna (12)</a><br />
<script src="http://static.livestream.com/scripts/playerv2.js?channel=psyark&#038;layout=playerEmbedDefault&#038;backgroundColor=0xffffff&#038;backgroundAlpha=1&#038;backgroundGradientStrength=0&#038;chromeColor=0x000000&#038;headerBarGlossEnabled=true&#038;controlBarGlossEnabled=true&#038;chatInputGlossEnabled=true&#038;uiWhite=true&#038;uiAlpha=0.5&#038;uiSelectedAlpha=1&#038;dropShadowEnabled=true&#038;dropShadowHorizontalDistance=10&#038;dropShadowVerticalDistance=10&#038;paddingLeft=10&#038;paddingRight=10&#038;paddingTop=10&#038;paddingBottom=10&#038;cornerRadius=10&#038;backToDirectoryURL=null&#038;bannerURL=null&#038;bannerText=null&#038;bannerWidth=320&#038;bannerHeight=50&#038;showViewers=true&#038;embedEnabled=true&#038;chatEnabled=true&#038;onDemandEnabled=true&#038;programGuideEnabled=false&#038;fullScreenEnabled=true&#038;reportAbuseEnabled=false&#038;gridEnabled=false&#038;initialIsOn=false&#038;initialIsMute=false&#038;initialVolume=10&#038;contentId=flv_6111d9e4-9c01-457a-b035-4958e5e59cd4&#038;initThumbUrl=http://mogulus-user-files.s3.amazonaws.com/chpsyark/2009/09/01/6111d9e4-9c01-457a-b035-4958e5e59cd4_1210.jpg&#038;playeraspectwidth=4&#038;playeraspectheight=3&#038;mogulusLogoEnabled=true&#038;width=400&#038;height=400&#038;wmode=window" type="text/javascript"></script></p>
<h3>敵の種類を作る</h3>
<p>ずーっと飾り気のない敵1種類だったので、新しい敵を追加してみました。</p>
<p>まず今まで具体クラスだったEnemyを敵の基底クラスにして、今までの敵をEnemyCクラスにしました。</p>
<p>また新たにEnemyのサブクラスであるEnemyAを作り、色を黒にして、弾を撃つ際の間隔を無くしてみると</p>
<div id="attachment_870" class="wp-caption aligncenter" style="width: 310px"><img src="http://b-o-w.jp/blog/wp-content/uploads/minidtl12.jpg" alt="新しい敵テスト" title="minidtl12" width="300" height="235" class="size-medium wp-image-870" /><p class="wp-caption-text">新しい敵テスト</p></div>
<p>凶悪な敵ができました。</p>
<p>プログラム自体は、ほぼコピペの作業しかしていないので割愛。</p>
<p>一点、ポリモーフィズムで呼ばれる基底クラスのメソッドにはvirtualをつける必要があることを忘れていて、Drawのオーバーライドでてこずりました。ActionScript秒です。</p>
<h3>DoGAを使ってモデルデータを作る</h3>
<p><a href="http://doga.jp/">DoGA</a>は3DCGの入門用のソフトです。簡単なモデラーDoGA-L1のサンプルライブラリが便利なので利用してみましょう。</p>
<div id="attachment_873" class="wp-caption aligncenter" style="width: 310px"><img src="http://b-o-w.jp/blog/wp-content/uploads/minidtl12_2.jpg" alt="DoGA L1で自機を作る" title="minidtl12_2" width="300" height="235" class="size-medium wp-image-873" /><p class="wp-caption-text">DoGA L1で自機を作る</p></div>
<p>[パーツ]-[パーツ追加]を押すとサンプルライブラリが出てくるので、まずは自機っぽい形を選んで配置します。これだけ。</p>
<div id="attachment_875" class="wp-caption aligncenter" style="width: 310px"><img src="http://b-o-w.jp/blog/wp-content/uploads/minidtl12_3.jpg" alt="自機できた" title="minidtl12_3" width="300" height="235" class="size-medium wp-image-875" /><p class="wp-caption-text">自機できた</p></div>
<p>ファイルメニューから[エクスポート]-[Direct3D データ出力（三角形化）]で出力。拡大率を聞かれますが、この状態では見当が付かないのでそのままでOKです。ファイル名はFighter.xとしました。</p>
<p>VisualStudioに戻り、まずソリューションエクスプローラのContentからもう使わないFighter.pngを取り除きます。その後追加→既存の項目を追加で先ほどのモデルを選択。</p>
<p>読み込んで表示するコードを書きます。</p>
<p>まず変数宣言。Model型一つに収まります。</p>
<div class="codecolorer-container csharp" style="height:35px;"><div class="codecolorer" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="kw1">private</span> <span class="kw1">static</span> Model model;</div></li></ol></div></div>
<p>次にモデル読み込み。</p>
<div class="codecolorer-container csharp"><div class="codecolorer" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="kw1">public</span> <span class="kw1">static</span> <span class="kw1">void</span> LoadContent<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; model = Game.<span class="me1">Content</span>.<span class="me1">Load</span>&lt;Model&gt;<span class="br0">&#40;</span><span class="st0">&quot;Fighter&quot;</span><span class="br0">&#41;</span>;</div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></div></div>
<p>最後に描画。</p>
<div class="codecolorer-container csharp"><div class="codecolorer" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="kw1">public</span> <span class="kw1">override</span> Draw<span class="br0">&#40;</span>GameTime gameTime<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span>ModelMesh mesh <span class="kw1">in</span> model.<span class="me1">Meshes</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span>BasicEffect effect <span class="kw1">in</span> mesh.<span class="me1">Effects</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; effect.<span class="me1">EnableDefaultLighting</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; effect.<span class="me1">Projection</span> = screenInfo.<span class="me1">ProjectionMatrix</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; effect.<span class="me1">View</span> = screenInfo.<span class="me1">ViewMatrix</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; effect.<span class="me1">World</span> =</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Matrix.<span class="me1">CreateRotationY</span><span class="br0">&#40;</span>item.<span class="me1">Roll</span><span class="br0">&#41;</span> *</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Matrix.<span class="me1">CreateTranslation</span><span class="br0">&#40;</span>item.<span class="me1">Position</span>.<span class="me1">X</span>, item.<span class="me1">Position</span>.<span class="me1">Y</span>, <span class="nu0">0</span><span class="br0">&#41;</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; mesh.<span class="me1">Draw</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></div></div>
<p>思ったより簡単です。</p>
<p>が、実行しても何も表示されません。モデルが小さすぎたようなので、拡大します。</p>
<p>Contentに追加したFighter.Xを選択してプロパティを表示します。</p>
<p>Content ProcessorのサブアイテムにScaleがあるので適宜大きい値にします。</p>
<p>また、表示したモデルの向きが気に入らないときは* Axis Rotationで回転することもできます。</p>
<p>これらを適切に調整して実行。<br />
<div id="attachment_877" class="wp-caption aligncenter" style="width: 310px"><img src="http://b-o-w.jp/blog/wp-content/uploads/minidtl12_4.jpg" alt="自機が出た" title="minidtl12_4" width="300" height="235" class="size-medium wp-image-877" /><p class="wp-caption-text">自機が出た</p></div></p>
<p>無事、自機の3Dモデルが出ました。よく見たら裏表なので全然無事ではないですが。</p>
<p>続きます。</p>
]]></content:encoded>
			<wfw:commentRss>http://b-o-w.jp/blog/2009/09/07/mini-dtl-xna-12/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ミニDTL.xna “ゲームはイチニチ30分まで！” 第11回</title>
		<link>http://b-o-w.jp/blog/2009/09/07/mini-dtl-xna-11/</link>
		<comments>http://b-o-w.jp/blog/2009/09/07/mini-dtl-xna-11/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 04:42:06 +0000</pubDate>
		<dc:creator>key</dc:creator>
		
		<category><![CDATA[XNA]]></category>

		<category><![CDATA[dev]]></category>

		<category><![CDATA[DeskTopLive]]></category>

		<category><![CDATA[desktoplivexna]]></category>

		<category><![CDATA[MiniDTL]]></category>

		<guid isPermaLink="false">http://b-o-w.jp/blog/?p=818</guid>
		<description><![CDATA[ミニDTL.xnaその11です。
8/31に配信した分です。前回に引き続いて3D化を進めました。

MiniDTL.xna (11)

ステージの座標系をちゃんと作る
これまではSpriteBatchによる2D描画だけだ [...]]]></description>
			<content:encoded><![CDATA[<p>ミニDTL.xnaその11です。</p>
<p>8/31に配信した分です。前回に引き続いて3D化を進めました。</p>
<p><span id="more-818"></span><br />
<a href="http://www.livestream.com/psyark/ondemand/flv_0e3c6be4-339f-4fde-853b-5b7597fc4e6d?initthumburl=http://mogulus-user-files.s3.amazonaws.com/chpsyark/2009/08/31/0e3c6be4-339f-4fde-853b-5b7597fc4e6d_1260.jpg&#038;playeraspectwidth=4&#038;playeraspectheight=3">MiniDTL.xna (11)</a><br />
<script src="http://static.livestream.com/scripts/playerv2.js?channel=psyark&#038;layout=playerEmbedDefault&#038;backgroundColor=0xffffff&#038;backgroundAlpha=1&#038;backgroundGradientStrength=0&#038;chromeColor=0x000000&#038;headerBarGlossEnabled=true&#038;controlBarGlossEnabled=true&#038;chatInputGlossEnabled=true&#038;uiWhite=true&#038;uiAlpha=0.5&#038;uiSelectedAlpha=1&#038;dropShadowEnabled=true&#038;dropShadowHorizontalDistance=10&#038;dropShadowVerticalDistance=10&#038;paddingLeft=10&#038;paddingRight=10&#038;paddingTop=10&#038;paddingBottom=10&#038;cornerRadius=10&#038;backToDirectoryURL=null&#038;bannerURL=null&#038;bannerText=null&#038;bannerWidth=320&#038;bannerHeight=50&#038;showViewers=true&#038;embedEnabled=true&#038;chatEnabled=true&#038;onDemandEnabled=true&#038;programGuideEnabled=false&#038;fullScreenEnabled=true&#038;reportAbuseEnabled=false&#038;gridEnabled=false&#038;initialIsOn=false&#038;initialIsMute=false&#038;initialVolume=10&#038;contentId=flv_0e3c6be4-339f-4fde-853b-5b7597fc4e6d&#038;initThumbUrl=http://mogulus-user-files.s3.amazonaws.com/chpsyark/2009/08/31/0e3c6be4-339f-4fde-853b-5b7597fc4e6d_1260.jpg&#038;playeraspectwidth=4&#038;playeraspectheight=3&#038;mogulusLogoEnabled=true&#038;width=400&#038;height=400&#038;wmode=window" type="text/javascript"></script></p>
<h3>ステージの座標系をちゃんと作る</h3>
<p>これまではSpriteBatchによる2D描画だけだったので、何も考えず、画面の座標系をそのままゲームの座標系にしていました。</p>
<p>つまり左上が0, 0で、自機が前に進むとPosition.Yは減っていました。一方、このゲームの自機にはScrollPositionというプロパティがあるのですが、これは自機が前に進むと増えていました。いい加減ですね。</p>
<div id="attachment_862" class="wp-caption aligncenter" style="width: 310px"><img src="http://b-o-w.jp/blog/wp-content/uploads/minidtl11.jpg" alt="画面設計" title="minidtl11" width="300" height="235" class="size-medium wp-image-862" /><p class="wp-caption-text">画面設計</p></div>
<p>で、こういうものを描きました。上が1Pにとってのステージの奥です。今後は、1PはPosition.YおよびScrollPositionが増加するように進みます。2Pは逆です。</p>
<h3>設計にあわせて書き直し</h3>
<p>上記にあわせて、ステージの大半を書き直します。それだけだとつまらないので、前回Fighterに組み込んだ3D周りの記述をコピペして、全クラス書き直してみました。</p>
<div id="attachment_865" class="wp-caption aligncenter" style="width: 310px"><img src="http://b-o-w.jp/blog/wp-content/uploads/minidtl11_2.jpg" alt="全部三角形" title="minidtl11_2" width="300" height="235" class="size-medium wp-image-865" /><p class="wp-caption-text">全部三角形</p></div>
<p>ゲーム要素が全部3Dレンダリングになったことで、左右画面ごとに共通のカメラ（ViewMatrix）を使ってシーンを描画できるようになりました。</p>
<p>ゲーム要素の描画を始める前に</p>
<div class="codecolorer-container csharp"><div class="codecolorer" style="font-family: monospace;"><ol><li class="li1"><div class="de1">Matrix view = Matrix.<span class="me1">CreateLookAt</span><span class="br0">&#40;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw3">new</span> Vector3<span class="br0">&#40;</span><span class="nu0">0</span>, fighters<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.<span class="me1">ScrollPosition</span>, <span class="nu0">1000</span><span class="br0">&#41;</span>,</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw3">new</span> Vector3<span class="br0">&#40;</span><span class="nu0">0</span>, fighters<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.<span class="me1">ScrollPosition</span>, <span class="nu0">0</span><span class="br0">&#41;</span>,</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; Vector3.<span class="me1">Up</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#41;</span>;</div></li></ol></div></div>
<p>で、このviewを使ってゲーム要素をレンダリングすれば1P視点。</p>
<p>その後viewを作り直して各ゲーム要素をもう一度描画すれば2P視点になります。</p>
<div class="codecolorer-container csharp"><div class="codecolorer" style="font-family: monospace;"><ol><li class="li1"><div class="de1">Matrix view = Matrix.<span class="me1">CreateLookAt</span><span class="br0">&#40;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw3">new</span> Vector3<span class="br0">&#40;</span><span class="nu0">0</span>, fighters<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">ScrollPosition</span>, <span class="nu0">1000</span><span class="br0">&#41;</span>,</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw3">new</span> Vector3<span class="br0">&#40;</span><span class="nu0">0</span>, fighters<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">ScrollPosition</span>, <span class="nu0">0</span><span class="br0">&#41;</span>,</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; Vector3.<span class="me1">Down</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#41;</span>;</div></li></ol></div></div>
<p>ViewPortも併用しているので、各ゲーム要素が左右分割を気にする必要はなくなりました。おお美しい。</p>
<p>続きます。</p>
]]></content:encoded>
			<wfw:commentRss>http://b-o-w.jp/blog/2009/09/07/mini-dtl-xna-11/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
