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

<channel>
	<title>GEOQUAKE Backstage &#187; Flash</title>
	<atom:link href="http://geoquake.jp/blog/tag/flash/feed/" rel="self" type="application/rss+xml" />
	<link>http://geoquake.jp/blog</link>
	<description>ゲームとか鋭意制作中のブログ</description>
	<lastBuildDate>Tue, 13 Apr 2010 11:24:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Flashでジョイスティックを使う実験</title>
		<link>http://geoquake.jp/blog/2010/02/10/flashjoystick/</link>
		<comments>http://geoquake.jp/blog/2010/02/10/flashjoystick/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 12:09:39 +0000</pubDate>
		<dc:creator>k0rin</dc:creator>
				<category><![CDATA[雑記]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Unity]]></category>

		<guid isPermaLink="false">http://geoquake.jp/blog/?p=1161</guid>
		<description><![CDATA[Flashはブラウザゲームのすぐれたプラットフォームですが、ジョイスティックが使えないのが欠点のひとつです。一方、新興のゲームプラットフォームにUnityがあります。こちらのプラグインはまだほとんど普及していませんが、ジ [...]]]></description>
			<content:encoded><![CDATA[<p>Flashはブラウザゲームのすぐれたプラットフォームですが、ジョイスティックが使えないのが欠点のひとつです。一方、新興のゲームプラットフォームに<a href="http://unity3d.com/">Unity</a>があります。こちらのプラグインはまだほとんど普及していませんが、ジョイスティックに対応しています。</p>
<p>FlashにもUnityにも、それぞれブラウザのJavaScriptとの連携手段が用意されています。それなら、Unityからブラウザを介してFlashにジョイスティックの状態を送れば、Flashでもジョイスティックが使えるんじゃ？　と思いついたので、実際にやってみました。</p>
<p><a href="http://geoquake.jp/experimental/UnityJoystickSensor/"><img src="http://geoquake.jp/blog/wp-content/uploads/2010/02/UnityJoystickSensorClip.png" alt="" title="UnityJoystickSensorClip" width="500" height="400" border="2" class="alignnone size-full wp-image-1163" /></a></p>
<ul>
<li><a href="http://geoquake.jp/experimental/UnityJoystickSensor/">Unity Joystick Sensor</a>（ソース一式あり）</li>
</ul>
<p>ジョイスティックの状態を送る一連のプロセスについて。まずUnity側からです。Unityでは、物理デバイスの入力を整理・抽象化して、それぞれ名前をつけて扱うようになっています。メニューの Edit > Project Settings > Input にその設定があります。今回はひとまず生データを送りたいので、レバーの軸とボタンを一通り登録します。レバーのデッドゾーン（Dead）もゼロにしておきます。</p>
<p><img src="http://geoquake.jp/blog/wp-content/uploads/2010/02/InputManagerClip.png" alt="" title="InputManagerClip" width="500" height="452" class="alignnone size-full wp-image-1190" /></p>
<p>気分の問題ですが、遅延を少なくするために、Unityの最大フレームレートを上げておきます。</p>
<pre class="brush: jscript;">
function Awake()
{
	Application.targetFrameRate = 300;
}
</pre>
<p>次に、ジョイスティックの状態の変化をブラウザに毎フレーム送信します。ブラウザとの通信については<a href="http://unity3d.com/support/documentation/Manual/Unity%20Web%20Player%20and%20browser%20communication.html">Unity Web Player and browser communication</a>に説明があります。Application.ExternalCall()でHTML内のJavaScriptを呼び出すことができます。実際のスクリプトとしては以下のようになります。</p>
<pre class="brush: jscript;">
var axes = new float[9];

function Update()
{
	for (var i = 1; i &lt;9; i++) {
		var position = Input.GetAxis(&quot;Axis&quot; + i);
		if (axes[i] != position) {
			axes[i] = position;
			turnOnLed();
			Application.ExternalCall(&quot;axisHandler&quot;, i, position);
		}
	}

	for (i = 0; i &lt; 16; i++) {
		var buttonName = &quot;Button&quot; + i;
		if (Input.GetButtonDown(buttonName)) {
			turnOnLed();
			Application.ExternalCall(&quot;buttonHandler&quot;, i, 1);
		}
		if (Input.GetButtonUp(buttonName)) {
			turnOnLed();
			Application.ExternalCall(&quot;buttonHandler&quot;, i, 0);
		}
	}
}
</pre>
<p>ちょっとしたテスト兼演出として、関数を呼び出したときにLEDが点灯するようにしました。</p>
<pre class="brush: jscript;">
function turnOnLed()
{
	GameObject.Find(&quot;Led&quot;).SendMessage(&quot;TurnOn&quot;);
}
</pre>
<p>次にHTMLです。Flashの埋め込みには<a href="http://code.google.com/p/swfobject/">SWFObject</a> 2.2を使用しています。Unityから呼び出されたJavaScriptの関数axisHandlerとbuttonHandlerが、ExternalInterfaceで登録したActionScriptの関数を呼び出します。</p>
<pre class="brush: jscript;">
var attributes = {
	id:&quot;Flash&quot;
};
swfobject.embedSWF(&quot;Game.swf&quot;, ...);
...
&lt;script type=&quot;text/javascript&quot;&gt;
	function axisHandler(no, position) {
		document.getElementById(&quot;Flash&quot;).axisHandler(no, position);
	}

	function buttonHandler(no, state) {
		document.getElementById(&quot;Flash&quot;).buttonHandler(no, state);
	}
&lt;/script&gt;
</pre>
<p>ExternalInterfaceは、ローカルファイルシステムではセキュリティのため動作しません。ローカルにApacheを立ててそこでテストするのが簡単です。また、ExternalInterfaceはいろいろ罠があって、ちょっとしたことで動かなくなることが多いようです。今回もそれでなぜかIEでだけ動かず、しばらくはまったんですが、教訓としては、SWFObjectのtest suiteから始めるのがいいと思います。</p>
<ul>
<li><a href="http://code.google.com/p/swfobject/wiki/test_suite">SWFObject 2.2 test suite</a></li>
</ul>
<p>ここの&#8221;Browser communication test page&#8221;がブラウザとの通信のサンプルです。test suiteというだけあって動くことが保証されていますので、このサンプルがサーバ上できちんと動くことを確かめてから少しずつ書き換えていくのがいいんじゃないでしょうか。</p>
<p>Flash側では、以下のようなクラスを作ってコールバック関数を登録し、メッセージを受け付けます。</p>
<pre class="brush: jscript;">
package
{
	import flash.external.ExternalInterface;

	public class Joystick
	{
		public static const AXIS_MAX:int = 9;
		public static const BUTTON_MAX:int = 16;

		private var axes:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;(AXIS_MAX);
		private var buttons:Vector.&lt;int&gt; = new Vector.&lt;int&gt;(BUTTON_MAX);

		function Joystick()
		{
			if (ExternalInterface.available) {
				ExternalInterface.addCallback(&quot;axisHandler&quot;, axisHandler);
				ExternalInterface.addCallback(&quot;buttonHandler&quot;, buttonHandler);
			}
		}

		public function axisHandler(no:int, position:Number):void
		{
			axes[no] = position;
		}

		public function buttonHandler(no:int, state:int):void
		{
			buttons[no] = state;
		}

		public function getAxis(no:int):Number
		{
			return axes[no];
		}

		public function isButtonPressed(no:int):Boolean
		{
			return (buttons[no] == 1);
		}
	}
}
</pre>
<p>これでUnityからFlashまでジョイスティックの状態が伝わるようになりました。</p>
<p>ちなみに、いったんここまで作った後で、逆の方法に思い当たりました。つまり、UnityからFlashにジョイスティックの状態を流し込むのではなく、FlashからUnityにジョイスティックの状態を問い合わせるやり方です。もしこちらができれば、通信量も間違いも少なく好ましいでしょう。が、ブラウザからUnityの関数をSendMessageで呼び出したときに、戻り値が取得できないので断念しました。</p>
<p>さて、これで、「Unityのプラグインがインストールされていればジョイスティックでも操作できるFlash」ができました。アクロバティックなやり方ですが、信じがたいことにIE8、Firefox 3.6、Google Chrome 4それぞれで<a href="http://www.amazon.co.jp/gp/product/B000CFX42E/">Xbox360コントローラ</a>などを使って普通に操作できるようです。特にアナログレバーを動かすとかなり頻繁にメッセージが送られるのでもつだろうかと心配だったんですが、レスポンスは悪くないし、CPU使用率もたいして上がりません。作る前はデータの間引きなども考えていたんですが、必要なさそうなのでやっていません。</p>
<p>で、実用性はどうかというと、微妙かなと思ってます。まず、ブラウザゲームでジョイスティックを使う文化がないですよね。それに、ジョイスティックを使いたい人はすでに<a href="http://www.vector.co.jp/soft/win95/util/se101657.html">JoyToKey</a>などを使っているはずです。アナログレバーが使えるという違いはありますが、Flashゲームはまずマウスとキーボードで遊べるように作りますから、ゲームにアナログレバーの必要な操作を持ち込むわけにはいかないでしょう。そもそも、ジョイスティックを使うゲームなら最初からFlashではなくUnityで作れよという気もします。</p>
<p>あと、１つのウェブページに２つの標準でない技術を使うことになるので、それなりにリスクがありそうです。Unityの出力するHTMLファイルも結構複雑ですし（ちなみにコメントで説明が書かれているので読んでおくのがおすすめです）、環境によっては不具合が発生するかもしれません。導入には結構ためらうものがあります。</p>
<p>もしUnityのプラグインがある程度普及すれば（20％くらい？）メリットのほうが大きくなるかもしれません。また、いずれにせよFlashでジョイスティックを使う方法ができたということで、ウェブではなく、どこかへの展示用のFlashなどでしたら役に立つかもしれません。</p>
<p>……ということで、どうもひたすら微妙な感じ。こんな<strong>変態的</strong>なことをさせる前に、そもそもAdobeがFlashでジョイスティックをサポートしてくれたらいいんですけどね……。<a href="http://jessewarden.com/2009/06/flash-player-11-gaming-platform.html">ゲーム志向にするとか考えてる</a>ならその辺検討してほしいなあ。</p>
]]></content:encoded>
			<wfw:commentRss>http://geoquake.jp/blog/2010/02/10/flashjoystick/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>N700系男子</title>
		<link>http://geoquake.jp/blog/2009/09/24/n700%e7%b3%bb%e7%94%b7%e5%ad%90/</link>
		<comments>http://geoquake.jp/blog/2009/09/24/n700%e7%b3%bb%e7%94%b7%e5%ad%90/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 20:38:28 +0000</pubDate>
		<dc:creator>k0rin</dc:creator>
				<category><![CDATA[雑記]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://geoquake.jp/blog/?p=1067</guid>
		<description><![CDATA[Super Express &#8211; wonderfl build flash online
タイトルに意味はありません（笑）。このところXNAやiPhone周辺をずっと調べてたんですが、だいぶ落ちついてきたので、 [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align:center;width:465px;margin-bottom:16px;"><iframe title="Super Express - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/0ff37c7bc76fc3ef5b5da93ae81235975ca153b0" width="465" height="490" style="border:1px black solid;"></iframe><a href="http://wonderfl.net/code/0ff37c7bc76fc3ef5b5da93ae81235975ca153b0" title="Super Express - wonderfl build flash online">Super Express &#8211; wonderfl build flash online</a></div>
<p>タイトルに意味はありません（笑）。このところXNAやiPhone周辺をずっと調べてたんですが、だいぶ落ちついてきたので、久しぶりのwonderfl新作です。ぼーっと眺めるのにいいんじゃないでしょうか。</p>
<p>架線柱のティアリングがちょっとひどいです。入れたとたんに一気に作る気をなくしかけたくらい。たぶんワーストケースに近いんじゃないかと……。</p>
]]></content:encoded>
			<wfw:commentRss>http://geoquake.jp/blog/2009/09/24/n700%e7%b3%bb%e7%94%b7%e5%ad%90/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google MapsにPapervision3Dでオーバーレイ表示</title>
		<link>http://geoquake.jp/blog/2009/07/31/pv3dovergooglemaps/</link>
		<comments>http://geoquake.jp/blog/2009/07/31/pv3dovergooglemaps/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 11:33:40 +0000</pubDate>
		<dc:creator>k0rin</dc:creator>
				<category><![CDATA[雑記]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://geoquake.jp/blog/?p=908</guid>
		<description><![CDATA[Google Maps API for FlashにMap3Dクラスが新設されて、マップを傾斜・回転できるようになりましたが、Papervision3Dを使用すると簡単に3Dオブジェクトをオーバーレイ表示することができま [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/intl/en/apis/maps/documentation/flash/3d-maps.html">Google Maps API for FlashにMap3Dクラスが新設</a>されて、マップを傾斜・回転できるようになりましたが、Papervision3Dを使用すると簡単に3Dオブジェクトをオーバーレイ表示することができます。サンプルを作ってみました（ソースコードつき）。</p>
<p><a href="http://geoquake.jp/experimental/HelloPerspectiveWorld/"><img src="http://geoquake.jp/blog/wp-content/uploads/2009/07/pv3doverlay1.jpg" alt="pv3doverlay1" title="pv3doverlay1" width="300" height="300" class="alignnone size-full wp-image-949" /></a></p>
<ul>
<li><a href="http://geoquake.jp/experimental/HelloPerspectiveWorld/">Hello Perspective World</a></li>
</ul>
<p>通常のマウスドラッグだけでなく、Shift＋ドラッグやCtrl＋ドラッグで回転操作ができるので試してみてください。Google Earthとだいたい同じ操作になっているようです。</p>
<p>短いコードですが、コアになるのはGoogleMapsCamera3Dクラスで、PV3DのCamera3Dクラスを拡張して、マップに同期する投影行列を与えています。Googleマップのワールド座標系は、東方向がX軸プラスで0?256、南方向がY軸プラスで0?256、上方向がZ軸プラスの左手座標系になっていますが、この座標系上に直接PV3Dのオブジェクトを描画することができます。</p>
<p>せっかくなので、もっと面白いものを表示してみましょう。</p>
<p><a href="http://geoquake.jp/experimental/HelloPerspectiveWorld2/"><img src="http://geoquake.jp/blog/wp-content/uploads/2009/07/pv3doverlay2.jpg" alt="pv3doverlay2" title="pv3doverlay2" width="300" height="300" class="alignnone size-full wp-image-951" /></a></p>
<ul>
<li><a href="http://geoquake.jp/experimental/HelloPerspectiveWorld2/">Hello Perspective World 2</a></li>
</ul>
<p>東京駅前にワイバーン。3Dモデルは<a href="http://www.geocities.jp/oirahakobito2/">26℃さん</a>制作のをお借りしました。かっこいいですねー。</p>
<p>なにかいる</p>
<p><a href="http://geoquake.jp/experimental/HelloPerspectiveWorld2/"><img src="http://geoquake.jp/blog/wp-content/uploads/2009/07/pv3doverlay3.jpg" alt="pv3doverlay3" title="pv3doverlay3" width="300" height="300" class="alignnone size-full wp-image-953" /></a></p>
<p><a href="http://geoquake.jp/experimental/HelloPerspectiveWorld2/"><img src="http://geoquake.jp/blog/wp-content/uploads/2009/07/pv3doverlay4.jpg" alt="pv3doverlay4" title="pv3doverlay4" width="300" height="300" class="alignnone size-full wp-image-954" /></a></p>
<p><a href="http://www.phinox.net/">ズサさん</a>のねぎミクモデルを<a href="http://blog.r3c7.net/?p=121">rectさんのところ</a>からお借りしました。ありがとうございます。こんな感じで、小さなものから大きなものまで大丈夫です。ちなみに<a href="http://geoquake.jp/blog/2009/07/31/drivingsimulator3d/">拙作</a>でも同じ方法で車体を描画しています。</p>
<p>あとは平面投影シャドウあたりが欲しいですね。PV3Dでどうするのがいいのか調査中。</p>
]]></content:encoded>
			<wfw:commentRss>http://geoquake.jp/blog/2009/07/31/pv3dovergooglemaps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2D自動車シミュレーター on Google Mapsを3D化</title>
		<link>http://geoquake.jp/blog/2009/07/31/drivingsimulator3d/</link>
		<comments>http://geoquake.jp/blog/2009/07/31/drivingsimulator3d/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 11:31:47 +0000</pubDate>
		<dc:creator>k0rin</dc:creator>
				<category><![CDATA[雑記]]></category>
		<category><![CDATA[2D自動車シミュレーター]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://geoquake.jp/blog/?p=881</guid>
		<description><![CDATA[Google Maps API for Flashが3D表示、というかマップを傾斜表示できるようになっています。

3D Perspective in the Maps API for Flash!
Google Map [...]]]></description>
			<content:encoded><![CDATA[<p>Google Maps API for Flashが3D表示、というかマップを傾斜表示できるようになっています。</p>
<ul>
<li><a href="http://googlegeodevelopers.blogspot.com/2009/07/3d-perspective-in-maps-api-for-flash.html">3D Perspective in the Maps API for Flash!</a></li>
<li><a href="http://code.google.com/intl/en/apis/maps/documentation/flash/3d-maps.html">Google Maps API for Flash &#8211; 3D Maps &#8211; Google Maps API for Flash</a></li>
</ul>
<p>Google Maps APIの担当者さまのご好意でAPIを公開前に触らせていただきましたので、2D自動車シミュレーターを3D化してみました。まだ2車種しかないし、モデリングも適当だし、ホイールも回らないし、ブレーキランプや方向指示器も点灯しないしでやることが山積みなんですが、とりあえず仮公開。</p>
<p><a href="http://geoquake.jp/en/webgame/DrivingSimulatorPerspective/"><img src="http://geoquake.jp/blog/wp-content/uploads/2009/07/2ddrivingsimulator1.jpg" alt="2ddrivingsimulator1" title="2ddrivingsimulator1" width="500" height="441" class="alignnone size-full wp-image-992" /></a></p>
<ul>
<li><a href="http://geoquake.jp/en/webgame/DrivingSimulatorPerspective/">2D Driving Simulator on Google Maps (Perspective)</a></li>
</ul>
<p>右のCamera Controlで視点を操作できます。ドロップダウンメニューで、車体前方を上にするか、北を上にするかを切り替えることができます。</p>
<p>Googleマップ版でも画面が回転するようにしてほしいという要望は結構いただいてたんですが、これまでAPIの制約でできませんでした。今回のアップデートで、回転できるようになっただけでなく、傾斜で遠方まで見えるようになったので、だいぶ走りやすくなったんじゃないかと思います。</p>
<p><a href="http://geoquake.jp/en/webgame/DrivingSimulatorPerspective/"><img src="http://geoquake.jp/blog/wp-content/uploads/2009/07/2ddrivingsimulator2.jpg" alt="2ddrivingsimulator2" title="2ddrivingsimulator2" width="500" height="441" class="alignnone size-full wp-image-993" /></a></p>
<p>実のところ、もっと視点を下げて3Dレースゲーのようにしたいんですが、手前のタイルが欠けたり、遠方のタイルの読み込みと描画でパフォーマンスが極端に悪くなってしまうので難しいようです。まあ、そこまで極端な視点を使いたいのはこのアプリくらいでしょうからね（笑）。</p>
<p>あと、困ったことがひとつあって、「2D自動車シミュレーター」なのにうっかり3D表示になってしまったという……。2Dを取っても3Dに変えてもつまらない名前になってしまうし、内部的には2D処理のままだし、そのままでいいかみたいな（……いいのか？）。</p>
<p>2D自動車シミュレーター自体根本的にどうにかしないとと思ってるんですが、他にやることがいろいろあって進展がないです。<small>iPhone版とかどうでしょうね？</small></p>
]]></content:encoded>
			<wfw:commentRss>http://geoquake.jp/blog/2009/07/31/drivingsimulator3d/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>やわらかボール</title>
		<link>http://geoquake.jp/blog/2009/06/04/yawarakaballs/</link>
		<comments>http://geoquake.jp/blog/2009/06/04/yawarakaballs/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 23:22:58 +0000</pubDate>
		<dc:creator>k0rin</dc:creator>
				<category><![CDATA[雑記]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://geoquake.jp/blog/?p=750</guid>
		<description><![CDATA[Yawaraka Balls &#8211; wonderfl build flash online

剛体を動かすにはもうBox2Dのような物理エンジンを使えばいいので、何か自分で動かすならやわらかいものかな、でも布と [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align:center;width:465px;"><iframe title="Yawaraka Balls - wonderfl build flash online" src="http://wonderfl.kayac.com/blogparts/b99bd4e71710fe9cf74e413730825e8a69c02226" width="465" height="490" style="border:1px black solid;" frameborder="0"></iframe><a href="http://wonderfl.kayac.com/code/b99bd4e71710fe9cf74e413730825e8a69c02226" title="Yawaraka Balls - wonderfl build flash online">Yawaraka Balls &#8211; wonderfl build flash online</a></div>
<p></p>
<p>剛体を動かすにはもう<a href="http://box2dflash.sourceforge.net/">Box2D</a>のような物理エンジンを使えばいいので、何か自分で動かすならやわらかいものかな、でも布とかメタボールとかもう皆やってるしなーとあれこれ考えていたところ、ローテクなやわらかボールを思いついたので作ってみました（というか自分ローテクしか無理）。たぶん意外となかったタイプ。</p>
<p>ばね法則でボールをやわらかく反射させつつ、ボールと壁、またはボール同士の距離によって見た目を変形させてます。ここまで単純化すると２点以上に同時に接触した場合に対処できないので、どうなるか心配だったんですが、ぎりぎり許容範囲？　ボールの数が多いとさすがにエラーが目立つ感じです。</p>
]]></content:encoded>
			<wfw:commentRss>http://geoquake.jp/blog/2009/06/04/yawarakaballs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>格ゲーコマンド入力判定</title>
		<link>http://geoquake.jp/blog/2009/05/20/fightinggame/</link>
		<comments>http://geoquake.jp/blog/2009/05/20/fightinggame/#comments</comments>
		<pubDate>Tue, 19 May 2009 16:08:51 +0000</pubDate>
		<dc:creator>k0rin</dc:creator>
				<category><![CDATA[雑記]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[ゲームプログラミング]]></category>

		<guid isPermaLink="false">http://geoquake.jp/blog/?p=430</guid>
		<description><![CDATA[格ゲーコマンド入力判定 &#8211; wonderfl build flash online

対戦格闘ゲームの必殺技コマンド入力の実験をしてみました。カーソルキーまたはテンキーでレバー、スペースキー・Ctrlキーでパ [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align:center;width:465px;"><iframe title="格ゲーコマンド入力判定 - wonderfl build flash online" src="http://wonderfl.kayac.com/blogparts/c038aaa3abe4c506cdcc8c9c44f991a80876d2be" width="465" height="490" style="border:1px black solid;" frameborder="0"></iframe><a href="http://wonderfl.kayac.com/code/c038aaa3abe4c506cdcc8c9c44f991a80876d2be" title="格ゲーコマンド入力判定 - wonderfl build flash online">格ゲーコマンド入力判定 &#8211; wonderfl build flash online</a></div>
<p><br/></p>
<p>対戦格闘ゲームの必殺技コマンド入力の実験をしてみました。カーソルキーまたはテンキーでレバー、スペースキー・Ctrlキーでパンチボタン、Shiftキーでキックボタンです。技の名前は気にしない方向でひとつ。</p>
<p>判定方法は、リングバッファに過去一定フレームの入力状態を蓄積して、バッファに各コマンドのパターンが含まれているかどうかを毎フレームチェックしています。</p>
<p>いろんな種類のコマンドを、できるだけ簡単なスクリプトひとつで検出できるよう考えてみたんですが（<a href="http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%8A%E3%83%9F%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">コナミコマンド</a>も大丈夫！）、実際のゲームで汎用的に使えるかどうかは自信がないです。たぶん何か不都合が出てくると思う。そうでなくても、たとえば溜めコマンドなら、溜めはじめた時点でモーションを移行したりする必要が出てくるでしょうし。</p>
<p><a href="http://geoquake.jp/blog/2009/05/11/warpsmash/">Warp Smash</a>にしょーもないバグを発見。あとでこっそり直しておこう……。</p>
]]></content:encoded>
			<wfw:commentRss>http://geoquake.jp/blog/2009/05/20/fightinggame/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Warp Smash</title>
		<link>http://geoquake.jp/blog/2009/05/11/warpsmash/</link>
		<comments>http://geoquake.jp/blog/2009/05/11/warpsmash/#comments</comments>
		<pubDate>Sun, 10 May 2009 16:48:48 +0000</pubDate>
		<dc:creator>k0rin</dc:creator>
				<category><![CDATA[雑記]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[ゲーム制作]]></category>

		<guid isPermaLink="false">http://geoquake.jp/blog/?p=355</guid>
		<description><![CDATA[Warp Smash (Pong variation) &#8211; wonderfl build flash online

どこかの絵を見て連想したので作ってみました。いわゆるポンのバリエーションで、マウスクリック [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align:center;width:465px;"><iframe title="Warp Smash (Pong variation) - wonderfl build flash online" src="http://wonderfl.kayac.com/blogparts/ed0c2c3b52880e0d9cefdafd7a89722a4d2e5b4f" width="465" height="490" style="border:1px black solid;" frameborder="0"></iframe><a href="http://wonderfl.kayac.com/code/ed0c2c3b52880e0d9cefdafd7a89722a4d2e5b4f" title="Warp Smash (Pong variation) - wonderfl build flash online">Warp Smash (Pong variation) &#8211; wonderfl build flash online</a></div>
<p><br/></p>
<p>どこかの絵を見て連想したので作ってみました。いわゆる<a href="http://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%B3_%28%E3%82%B2%E3%83%BC%E3%83%A0%29">ポン</a>のバリエーションで、マウスクリックでパドルが反対側にワープします。せっかくなので、BlurFilterを使ってパドルにモーションブラーをかけてみたりしました。</p>
<p>パドルをボールに合わせるのに加えて、パドルを早く反対側に移動させないとボールが返しにくい、でも早くクリックしすぎても駄目というタイミングゲームにもなっているのがミソかなと勝手に思ってます。だいたいゲームというのは、アクションにせよ何にせよ、プレイヤーに２つ以上のことを同時にさせると面白くなるんじゃないかと。１つだとどうすればいいかすぐ分かってしまうので。</p>
<p>ただ、マウスカーソルがFlashからはみ出さないように頑張るという不自然な３つ目が出てきてしまって微妙。マウスカーソル自体邪魔だし、ブラウザゲームでは、マウスが使えるといってもネイティブアプリケーションと同じようには扱えないってことでしょうか。</p>
<p>今日活躍のプチ関数。</p>
<pre class="brush: jscript;">
private function clamp(n:Number, min:Number, max:Number):Number {
	if (n &lt; min) { n = min; }
	if (n &gt; max) { n = max; }
	return n;
}
</pre>
<p>スコアのカンストつき加算にまで乱用してたり。</p>
<pre class="brush: jscript;">
　
score = clamp(score + 1, 0, 9999);
　
</pre>
<p>作る前は<a href="http://d.hatena.ne.jp/ABA/20090130">100行ゲーム</a>を意識してたんですが、こういうのが好きな体質なので無理っぽいです……。</p>
]]></content:encoded>
			<wfw:commentRss>http://geoquake.jp/blog/2009/05/11/warpsmash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>気体のような何か</title>
		<link>http://geoquake.jp/blog/2009/04/17/gas10000/</link>
		<comments>http://geoquake.jp/blog/2009/04/17/gas10000/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 10:39:02 +0000</pubDate>
		<dc:creator>k0rin</dc:creator>
				<category><![CDATA[雑記]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://geoquake.jp/blog/?p=298</guid>
		<description><![CDATA[

気体のような何か &#124; wonderfl build flash online

wonderflのパーティクル祭りがすごいことになってるので急遽制作。マウスでピストンを動かして圧縮したりできます。物理的ツッコミはなし [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wonderfl.kayac.com/code/56b9cc2acbe9ef50de46a96645b3eac62a215957"><img src="http://geoquake.jp/blog/wp-content/uploads/2009/04/gas10000.png" alt="gas10000" title="gas10000" width="465" height="465" class="aligncenter size-full wp-image-299" /></a></p>
<ul>
<li><a href="http://wonderfl.kayac.com/code/56b9cc2acbe9ef50de46a96645b3eac62a215957">気体のような何か | wonderfl build flash online</a></li>
</ul>
<p><a href="http://wonderfl.kayac.com/">wonderfl</a>のパーティクル祭りがすごいことになってるので急遽制作。マウスでピストンを動かして圧縮したりできます。物理的ツッコミはなしの方向で……。</p>
]]></content:encoded>
			<wfw:commentRss>http://geoquake.jp/blog/2009/04/17/gas10000/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>うごく三角形トリック</title>
		<link>http://geoquake.jp/blog/2009/04/01/triangletrick/</link>
		<comments>http://geoquake.jp/blog/2009/04/01/triangletrick/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 21:31:49 +0000</pubDate>
		<dc:creator>k0rin</dc:creator>
				<category><![CDATA[雑記]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://geoquake.jp/blog/?p=203</guid>
		<description><![CDATA[Famous Triangle Trick &#8211; wonderfl build flash online

Tweenerの練習がてら、有名な三角形トリックをアニメーションさせてみました。けど、こうやって動かす [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align:center;width:470px;"><iframe title="Famous Triangle Trick - wonderfl build flash online" src="http://wonderfl.kayac.com/blogparts/39d3cac8ab2ec540c0755246ac9306d915bc7ab2" width="465" height="490" style="border:0px black solid;" frameborder="no"></iframe><a href="http://wonderfl.kayac.com/code/39d3cac8ab2ec540c0755246ac9306d915bc7ab2" title="Famous Triangle Trick - wonderfl build flash online">Famous Triangle Trick &#8211; wonderfl build flash online</a></div>
<p><br/></p>
<p><a href="http://code.google.com/p/tweener/">Tweener</a>の練習がてら、有名な三角形トリックをアニメーションさせてみました。けど、こうやって動かすとバレバレになってしまうかなー。</p>
<p>配色や線の太さなどがなかなか決まらなくて、かなり無駄なリビルドを繰り返しました。これくらい簡単な絵でも、最初にきちんとスケッチしたほうがいいようです。僕の場合。</p>
<p>で、Tweener面白いですね（いまさらすぎる。何周遅れだろう？）。正直、ウェブでぼーっと眺めていた限りでは、こんな処理をライブラリ化する必要があるんだろうかと首を傾げてたんですが、簡単なシーケンスも組めるし、ベジェ曲線や<a href="http://nutsu.com/blog/2009/020520_as_tween_spline.html">スプライン曲線でも</a>動かせるし、何より動きを試すコストがぐっと下がるのが大きいです。なるほど、Flasherの人たちはこれで心地よい動きをさくさく作ってたのか、と納得。</p>
<p>簡単そうなことが実は意外に重荷になっていて、さらに簡単にすることで大きな利益が得られるようなことがあるのかもしれないなと思いました。その系統だと、例えばこういうプチ関数が好きなんですが、どうでしょうね。</p>
<pre class="brush: jscript;">
// [n, m)の乱数を取得
function random(n:Number, m:Number):Number {
	return n + Math.random() * (m - n);
}

// 自乗を取得
function square(n:Number):Number {
	return n * n;
}

// nを[s0, s1]から[d0, d1]に変換
function linearTransform(n:Number, s0:Number, s1:Number, d0:Number, d1:Number):Number {
	return (d0 + (n - s0) * (d1 - d0) / (s1 - s0));
}
</pre>
<p>インライン最適化のないActionScriptだとちょっと使うのをためらいますが。</p>
]]></content:encoded>
			<wfw:commentRss>http://geoquake.jp/blog/2009/04/01/triangletrick/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash 10でPS2の花火デモ</title>
		<link>http://geoquake.jp/blog/2009/01/17/firework/</link>
		<comments>http://geoquake.jp/blog/2009/01/17/firework/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 16:56:05 +0000</pubDate>
		<dc:creator>k0rin</dc:creator>
				<category><![CDATA[雑記]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://geoquake.jp/blog/?p=109</guid>
		<description><![CDATA[wonderfl初投稿。パーティクル＆モーションブラーな花火です。


PS2 Firework (Particles and Motion blur)

元ネタはPS2が出たときのこれ。

「次世代プレイステーション」 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wonderfl.kayac.com/">wonderfl</a>初投稿。パーティクル＆モーションブラーな花火です。</p>
<p><a href="http://wonderfl.kayac.com/code/fd77117130bc4a82c686afa7c3a2fa19a3b8e0fa"><img src="http://geoquake.jp/blog/wp-content/uploads/2009/01/firework1.png" alt="firework1" title="firework1" width="465" height="465" class="aligncenter size-full wp-image-132" /></a></p>
<ul>
<li><a href="http://wonderfl.kayac.com/code/fd77117130bc4a82c686afa7c3a2fa19a3b8e0fa">PS2 Firework (Particles and Motion blur)</a></li>
</ul>
<p>元ネタはPS2が出たときのこれ。</p>
<ul>
<li><a href="http://www.watch.impress.co.jp/pc/docs/article/990302/play.htm">「次世代プレイステーション」の基本仕様を公開、国内発売はこの冬を予定</a></li>
</ul>
<p>この花火デモ、洗面台のアヒルと並んで人気でしたけど、難度は一番低いですよね。MSが対抗意識丸出しでXboxでも似たようなデモを出してきたり、DirectX SDKのサンプルにも入れてきたりして、当時ちょっと面白かったです。</p>
<p>Flashについてですが、直径0?16ピクセルでプリレンダリングしたパーティクルをBitmapDataにcopyPixelsで描画してフレームを作成し、drawで加算半透明で10枚合成してモーションブラーをかけています。最初はパーティクルをShapeやBitmapDataのdrawで描画していたんですが、案の定ものすごく遅かったのでcopyPixelsに置きかえました。アンチエイリアスがかからないので描画品質は落ちますが、７倍くらい速くなってます。copyPixelsだとパーティクルの重なりで加算合成ができませんが、そこはモーションブラーで明るくなってくれるだろうと。</p>
<p>ちなみにマウスをぐりぐり回すとブラーで楽しいです。こんな感じ。</p>
<p><a href="http://wonderfl.kayac.com/code/fd77117130bc4a82c686afa7c3a2fa19a3b8e0fa"><img src="http://geoquake.jp/blog/wp-content/uploads/2009/01/firework2.png" alt="firework2" title="firework2" width="465" height="465" class="aligncenter size-full wp-image-134" /></a></p>
<p>火花の照り返しは、テクスチャにdrawで適当なサイズとアルファで描画して、床ポリゴン２枚に貼りつけています。Flash 10ではパースペクティブ補正つきでポリゴンが描画できるので、普通に火花と描画位置がぴったり合うのが嬉しいところです。</p>
<p>また、座標変換にFlash 10で新しく追加された3Dベクトル・行列クラスを使用しています。wonderflのおかげでこのAPIの存在を知りました。ただ、このAPIについてはかなり独特の癖やバグがあったり、Flash Playerがクラッシュしたりして（まさにCrash Playerってやかましい）、あれこれ調べまわるはめに。せっかくなので、これまで分かったことについて後でまとめてみるつもりです。</p>
<p>あと、ActionScriptの最適化で気づいたポイントですが、アクセサ（set、get）はあくまで関数だということ。APIのプロパティにアクセスするときなど、つい普通の変数を読み書きしているつもりで、遅い関数呼び出しをしてしまっていることに気づきにくいので要注意だと思いました。そのあたりをチェックしたら描画込みであっさり倍以上速くなったりしています。他にもいろいろチューニングして、それでもCore 2 Duo E8500-3.16GHz機で１フレームに20ミリ秒ほどかかってますが……wonderflを見るような人なら大丈夫でしょう、たぶん。</p>
<p>それと、wonderflのコードがうまく埋め込めない感じなんですが、他のブログでも同じ表示になってるみたい？　一時的なものなんでしょうか。</p>
<p><iframe src="http://wonderfl.kayac.com/blogparts/fd77117130bc4a82c686afa7c3a2fa19a3b8e0fa" width="484" height="490" style="border:1px black solid;"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://geoquake.jp/blog/2009/01/17/firework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
