当たり判定

去年はxnaとsource sdkwordpressをいきなり授業に導入したりして異様に忙しかった。 今年はそこまで忙しくはないのだが、 去年の手直しというかチューニングはまだかなり必要で、 それなりに精神的に追い詰められる。 いろいろ悩んでいるとやはりxnaというのはとてつもなく重要なものであって、 これをきちんと学生に教えられるとどれほど利益があるかしれない。 しかし、xnaC#といったものはJavaよりも易しいわけではない。 むしろJavaよりは難しい。 「Java程度に易しい」という言い方ができる程度に難しい。 Javaを易しい言語だと思える人にはたぶんC#は易しいだろう。 確実に言えることは、 C++ / DirectXよりは簡単だということだけだ。

それでできるだけPlatformerのソースを参考にして、 「教科書的」なコーディングを心がけようとしているのだが、 ちと驚いたことに、 Platformerでは案外コレクションやイテレータを使ってない。 Listは使っているがなんかforループで回して配列みたいな使い方をしている。

Cの時代の構造体と配列とforループはそれぞれJavaC#では クラスとリストとイテレータに抽象化された。 Cがわかっている人にはクラスとリストとイテレータはCの構造体と配列とforループを抽象化したもんなんだよと言えばたぶんわかってもらえるが、 C#からいきなり始める人にはそんな説明ができない。 ではCから入門するかといわれれば、 自分ではそんな科目は担当したくない。 だれか自分以外の人が基礎教養としてきちんとCをしつけておいてくれるととてもありがたいとは思う。 だが、Cで構造体と配列とforループだけ使ってどんなプログラムが組めるというのか。 せいぜい四則演算とかソートとかそんなものだろう。 そんなカリキュラムは芸術学部には絶対組み込めないだろう。

話がそれたんだが、 とりあえずクラスは教えるとして、後は配列とforループまでにして十分な気がしてきた。 だってPlatformerだってそうしてるんだから。

例年当たり判定にはRectangleのIntersectsとかContainsなどのメソッドを使ってきた。 あるいはMath.Absとか。 実に悩ましいが、 今回はあっさりとVector2.Distance(Vector2, Vector2) でやることにした(XNA090518)。 一番わかりやすいかなと。 今年はRectangleをほとんどまったく使ってない。 使ってるのはSpriteBatch.Draw()のsource rectangleとdestination rectangleくらい。 キャラの外接矩形としてはまったく使ってない。 もしかしたら使う必要まったくないかもしれない。 このまま逃げ切れるかな。 クラスをまったく使わない(という言い方は語弊があるが)のはこの週まで。 来週からはいよいよクラス設計。

XNAもずいぶん洗練されてきて、Managed DirectX 1.1とXNA3.0では windows3.1とwindows7くらいの違いがある。 MDX / C#当時ならば私は迷わずJava Appletを選んだ。 windows3.1よりもsolarisを選ぶようなもんだ。 が、今やJavaはAppletもGraphics2DもJava Media Frameworkもほぼ廃れて使えない。 使えるとしたら亜種のProcessingくらいか。 あるいはWeb用途ならばSVGやCanvas2Dなどに取って代わられてしまった。 いずれにしてもJavaCobol化しつつある。 C#は元気がある。

xnaは過小評価されている。 マイクロソフトも、少なくとも日本ではあまり熱心に売り込まない。 しかし、 たとえばautodesk softimage mod toolを商用利用しようと思えば、 xnaを使うしかない。 そこまでお膳立てしてくれる会社がマイクロソフト以外にあろうか (匹敵するものとしたらGoogleSketchUpくらいか)。 XNAは紛れもなく最高の教材だが、その意義を周りに理解してもらうのは難しい。 まして、source sdkに関しては自分自身未だに迷いがある。 XNAを教材として利用しているところは世界中に何百とあるだろうが、 source sdkを授業で教えているのはもしかすると私だけだ。 大学でtombraider level editorを教材としたのも私だけかもしれん。 私がやっていることの意味を理解してもらうのにあとどれくらいかかるか想像もできない。