<?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; ゲームプログラミング</title>
	<atom:link href="http://geoquake.jp/blog/tag/%e3%82%b2%e3%83%bc%e3%83%a0%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0/feed/" rel="self" type="application/rss+xml" />
	<link>http://geoquake.jp/blog</link>
	<description>ゲームとか鋭意制作中のブログ</description>
	<lastBuildDate>Wed, 16 May 2012 13:03:27 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Dartの演算子オーバーロードを使ってみる</title>
		<link>http://geoquake.jp/blog/2012/04/02/dartoperatoroverloading/</link>
		<comments>http://geoquake.jp/blog/2012/04/02/dartoperatoroverloading/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 11:42:51 +0000</pubDate>
		<dc:creator>k0rin</dc:creator>
				<category><![CDATA[雑記]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[ゲームプログラミング]]></category>

		<guid isPermaLink="false">http://geoquake.jp/blog/?p=2418</guid>
		<description><![CDATA[たまにはブログも更新しないと、ということで。以前Flashで作ったものをDart＋HTML5 Canvasに移植したものです。ドラッグでポイントを動かせます（Operaで動かないのは……なんででしょう？）。リンク先にソー [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://geoquake.jp/experimental/DartCanvasTest/"><img src="http://geoquake.jp/blog/wp-content/uploads/2012/04/DartCanvasTest.png" alt="" title="DartCanvasTest" width="500" height="400" class="alignnone size-full wp-image-2419" /></a></p>
<p>たまにはブログも更新しないと、ということで。<a href="http://wonderfl.net/c/mEpx">以前Flashで作ったもの</a>をDart＋HTML5 Canvasに移植したものです。ドラッグでポイントを動かせます（Operaで動かないのは……なんででしょう？）。リンク先にソースコードも置いてあります。</p>
<ul>
<li><a href="http://geoquake.jp/experimental/DartCanvasTest/">Dart Canvas Test</a></li>
</ul>
<p>これはもともと、ActionScriptに演算子オーバーロードがなく、ベクトルの計算などが書きづらいのをどうしようかと試行錯誤したものだったんですが、例えばpositionとvelocityがVector2クラスのインスタンスだとして、</p>
<pre>position = add(position, mul(velocity, deltaTime));</pre>
<p>とでもするしかないかなという感じでした（詳しくは省きますが、実際にはこれじゃダメでしょう）。DartならVector2クラスにoperatorを定義すれば、</p>
<pre>position += velocity * deltaTime;</pre>
<p>のように直感的に書けます。</p>
<p>演算子オーバーロードというと、そんなもの要らないよと言う人も多いのですが、ベクトルや行列の計算にはあるととても便利なのです。ゲームプログラム（とりわけ3Dの）でC++が使われる理由のひとつとして、演算子オーバーロードで幾何学計算が素直に書けて、しかもコンパイラの最適化で十分に速いアセンブリコードが出力されるというのが大きいと思います。UnityのJavaScriptも、ベクトル等の計算が普通に書けるよう独自に拡張されています。</p>
<p>そんなわけで、Dartに演算子オーバーロードが入ってきたのは嬉しいです。……が、上の例がfrogcでJavaScriptにどう変換されるか見てみると……いちいち型チェックしてるんですか、これ。オーバーヘッドがかなり大きそうで不安ｗ　DartネイティブのVMに期待って感じでしょうか。</p>
<pre class="brush: jscript; title: ; notranslate">
position = $add$(position, ($mul$(velocity, deltaTime)));

...

function $add$complex$(x, y) {
  if (typeof(x) == 'number') {
    $throw(new IllegalArgumentException(y));
  } else if (typeof(x) == 'string') {
    var str = (y == null) ? 'null' : y.toString();
    if (typeof(str) != 'string') {
      throw new Error(&quot;calling toString() on right hand operand of operator &quot; +
      &quot;+ did not return a String&quot;);
    }
    return x + str;
  } else if (typeof(x) == 'object') {
    return x.$add(y);
  } else {
    $throw(new NoSuchMethodException(x, &quot;operator +&quot;, [y]));
  }
}

function $add$(x, y) {
  if (typeof(x) == 'number' &amp;&amp; typeof(y) == 'number') return x + y;
  return $add$complex$(x, y);
}

...
</pre>
<p>ついでに、演算子オーバーロードは必要なんだ、という他の方の証言を。</p>
<ul>
<li><a href="http://blog.thejit.org/2009/01/27/why-not-operator-overloading-in-javascript/">Why not Operator Overloading in JavaScript?</a></li>
<li><a href="http://www.irrlicht3d.org/pivot/entry.php?id=887">Irrlicht3d.org &#8211; Operator Overloading, please</a></li>
</ul>
<p>JavaScriptになかなかつかない理由。いずれはなんとかなりそう？</p>
<ul>
<li><a href="http://www.quora.com/Why-hasnt-operator-overloading-been-added-to-ECMAScript">Why hasn&#8217;t operator overloading been added to ECMAScript? &#8211; Quora</a></li>
</ul>
<p>余談ですが、Dartといえば<a href="https://gist.github.com/1277224">Hello, WorldをJavaScriptに変換したら17000行になった</a>というのが話題になりましたけど、今はだいぶ小さくなってます。このサンプルの出力（<a href="http://geoquake.jp/experimental/DartCanvasTest/CanvasTest.dart.js">CanvasTest.dart.js</a>）が150KBくらいです。Closure Compilerを通すと55KBくらいになるんですが、動かなくなるので、ちょっと調べないといけなさそうです。</p>
<p>（追記）ちなみにCoffeeScriptでも<a href="https://github.com/jashkenas/coffee-script/issues/727">演算子オーバーロードの要望が何度も挙がって都度却下されている</a>ようなのですが、どうも、動的型言語からJavaScriptへのトランスレートでは非効率な変換結果にならざるを得ないようです。a + bという式があったときに、aとbの型が実行時まで決まらないので、関数の呼び出しに変換するべきかどうか分からないと……。</p>
<p>C#からJavaScriptに変換する<a href="http://jsil.org/">JSIL</a>の<a href="http://hildr.luminance.org/Raytracer/Raytracer.html">Raytracer Demo</a>を見ると、演算子オーバーロードが素直に変換できているので気になります。ただ、こちらは出力が結構大きくなってしまうようですが。</p>
]]></content:encoded>
			<wfw:commentRss>http://geoquake.jp/blog/2012/04/02/dartoperatoroverloading/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>ゲームプログラマになる前に覚えておきたい技術</title>
		<link>http://geoquake.jp/blog/2008/11/27/gameprogrammer/</link>
		<comments>http://geoquake.jp/blog/2008/11/27/gameprogrammer/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 15:22:09 +0000</pubDate>
		<dc:creator>k0rin</dc:creator>
				<category><![CDATA[雑記]]></category>
		<category><![CDATA[ゲームプログラミング]]></category>

		<guid isPermaLink="false">http://geoquake.jp/blog/?p=49</guid>
		<description><![CDATA[買いました。パワースマッシュ3などに携わったセガの現役プログラマさんによる貴重な入門書。これはまた人が殺せそうな……今までに出たゲーム制作系の書籍で一番分厚いんじゃ？ 一通り目を通したけど、やっぱり自分は数学周りがボロボ [...]]]></description>
			<content:encoded><![CDATA[<p><iframe style="width: 120px; height: 240px;" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?t=geoquake-22&amp;o=9&amp;p=8&amp;l=as1&amp;asins=4798021180&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr"></iframe></p>
<p>買いました。パワースマッシュ3などに携わったセガの現役プログラマさんによる貴重な入門書。これはまた人が殺せそうな……今までに出たゲーム制作系の書籍で一番分厚いんじゃ？</p>
<p>一通り目を通したけど、やっぱり自分は数学周りがボロボロだなあと。たまに透視変換行列とか頑張って導出してみたりするんだけど、導出過程にまったく自信が持てない、そんなレベル。きちんと消化させてもらおうと思います。</p>
<p>巻末で紹介されてる「<a href="http://www.amazon.co.jp/dp/4480086757">オイラーの贈物</a>」だけど、再版しないのかな。あちこち書店や古本屋を見かけるたびに探しまわってるんだけど全然見つからない。どうもこの本が手に入らないことが数学を再勉強しない理由になってしまってたりします。よほどいい本だとあちこちで評判なので、スルーすると土台がおかしくなりやしないかという。所詮は言い訳なんですけどね。Amazonの最安値が5,995円。いっそタイ米をはたいてしまおうか。いやタイ米ではなく。</p>
<p>ボンバーマンを侮っていたことに気づきました。ちょっとFlashで作ってみるつもり。</p>
]]></content:encoded>
			<wfw:commentRss>http://geoquake.jp/blog/2008/11/27/gameprogrammer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

