Javaでゲームを作るとよい理由

http://d.hatena.ne.jp/bleis-tift/20091208/1260238525

俺を誘っている・・・ようにみえた。

んでやってみる。

1. enum が便利

異論はない。クラスで実装されているのもよい。

ただし、所詮enumとして使うにとどめること。メソッドをごてごてつけたりするならちゃんとクラスで実装すること。状態のフラグや集合を定数で表すこと、それがenumの求められることだから。switchで分岐に使っているくらいがちょうどよい。クラスの中に状態を持たせ始めるなら必ずenumをつかわないこと!

できることとやってもいいことは違う。

あ、ゲーム関係ないっすね。基本中の基本ということで。

2. Windows と同じバイナリが MacLinuxSolarisでも動く

まぁJavaなんで当たり前ですね。

まずJava2Dで収まっている範囲内なら問題なしでしょう。

注意しなくてはならないのはDPIです。OSによって初期値は違いますし、同じOSでも設定によって変わってきます。画像系はピクセルで設定することが多いので注意です。また、フォントもOSによって大きく変わってきます。あらかじめ画像化しとくのが無難です。


Java2Dはαブレンディングの種類がほとんどないのでαブレンディングや3Dを使うならOpenGLを使いましょう。Windowsのほか、LinuxMacSolarisで動きます。


JavaからのSDLはやめといたほうがいいです。開発がみんなとまっています。どうせ手軽にOpenGLをセットアップするための用途でしかみんな使っていないでしょう?JavaOpenGLはセットアップが非常に容易なので、SDLのセットアップより簡単になることもあります。


サウンドはJavaSoundがありますので、直接pcmの生データをぶち込むことが出来ます。DirectSoundのリングバッファをストリームに置き換えて実装されています。リングであることすら意識しません。


ジョイパッドはJInputを使いましょう。Solarisはたしか未対応だった気がしますが。Windowsで動くのは確認済みです。


それでも面倒だというあなたのためにクロスプラットフォームな2DゲームライブラリであるShinGL4というものがあります。宣伝♪
https://sites.google.com/site/shin68k/product/shingl4

3. 低級関数・低級メソッドとおさらばできる

元ネタが文字列の扱い程度の話なんで何をいまさらでパス。

4. いろんな文字コードでソースがかける

あんまり。

5. new しっぱなしでも問題ない なんて思うはずはない

参照つかみっぱなしには注意。なのはいいけど。

参照つかんでるのはメモリーリークとは言わない。それはGC対象になっちゃダメだから。


弱参照はつかわないこと。メモリ管理は自前で出来るくらいじゃないとダメ。タイミングがわからないのが一番怖いのだ。


GCさせないチューニングしたいのなら殿堂入りしたら最後までつかみっぱなしにさせるようなコードを書く必要あり。もしくはすぐ作ってすぐに破棄させる。スループットよりレスポンスが大事ということはものすごく多い。

たとえばストリームの読み書きするときにこんなコードを書いてはいけないってこと。

byte[] buffer = new byte[1024];
int len;
while((len = in.read(buffer)) >= 0){
  //なんかする
}

以下のコードのほうが正義になる場面もあり。

while(true){
  byte[] buffer = new byte[1024];
  int len = in.read(buffer);
  if(len<0) break;
  //なんかする
}

6. 型を強くつけれる

Cでよく使われる「void*」。C++なら使うことはまずないでしょうけど。

Javaではちゃんと作れば無縁ですね。

型を意識して欠くことによって後で見直したとき、他人が造ったものを見るときなどかなり助かります。おいらは型の省略は大嫌いな人種なので強いほうがよい。IDEのサポートも手厚くなるし。

ただし、Javaは高レベル言語として言われることが多いですが、わりとコンピュータであることを意識するつくりになっています。参照型とポインタの話とか、プリミティブとラッパークラスとか、スタックとヒープとか。

7. ツール作りが楽

クロスプラットフォームGUIコンポーネントが作れるのが楽ですね。おいらはすぐGUIのツールとか作ります。すぐ作ってすぐに使い捨てる。それができるのはJavaの特徴でしょう。NetBeansなら楽ですよね。大概の自分で使うツール程度なら細かい挙動を知る必要はないと思いますし。売り物にするとか見た目やエフェクトをと考えると面倒ですが、まぁ問題はないでしょう。


Javaは1つのクラスにmain作ることが出来るので1つのプロジェクト内でたくさんのツールをしのばせることが多いです。ツールが作りやすいわけです。

注意するのはJUnitで実行しないこと。あいつはAWTのスレッドがあっても殺してきます。

また、プロジェクトの構成にMaven2を使わないこと。こいつはユーザーの対話を求めないバッチのみでしかまともに動きません。Webアプリ以外で作ると死にます。ライブラリを作る場合もテスト用コードやツールをたくさん作る人にとって選択してはいけないビルドツールのひとつです。

8. ヘッダファイルを書かなくて良い

まぁ、ヘッダはないけど。そもそもCの問題ってそこなの?