Javaで弾幕STGは作れるのか…?

個人的にJavaが好き(今はScala)なんですが、JavaのGUI(Swing,Graphics)は遅いやら本当は早いやら実際のところがわかりませんでした。
そこで、ないなら作ればいいのよ精神で作ってみました。
作成したゲームは「さくらともうひとつの審判」です。肩書としては「同人二次創作フリーゲーム弾幕STG」ってところでしょうか。
【追記:2015/07/31】ちょっとだけ文章追加

Javaで弾幕STGは作れるのか
まずは「Javaで弾幕STGは作れるのか?」という話の結論からいきたいと思います。

ゲームをプレイすれば分かります、というのは冗談で。

60fpsでも作れます。

が、稀に?微妙に揺らぐ感じ?がします。
60fpsは保てるし、ゲームへの影響はほぼなく、ただちょっと気になる程度です。
しかしシビアなゲームで違和感が発生し集中力などが奪われるのは正直不快な要素です。

考えられる原因として、GCが考えられますが、正直分かりません。→多分sleepで細かい時間を指定できないことが原因?
任意のタイミングで発生させるのが難しいし、色々試しても悪化したりするくらいで原因解明が俺にはできませんでした。
GC対策として弾を使い捨てしない方式でインベーダーを作ってみたけど、これも稀に発生します(Scalaだけど)。
その記事へのリンク
正直作ったので疲れて解明するモチベがわかないというか…。


追記:sleepの部分を固定時間にすればこの現象を防げると思われます。ただしぴったり60fpsにできなかったり、処理落ちが起きやすくなるかも。もっといい方法でsleepできれば問題解決すると思います。

ちなみに弾幕STGに慣れてる人はマジで楽しめると思います。慣れてない人はこのゲームで慣れよう。
ただ、一応弾幕STGなので多少のスペックがないと単純にガクガクします。問題は60fps出てるのに起きます。

また、ゲームに直接は関わりませんがJavaではゲームパッドが容易には使えない?という問題がありました。
そのため今回はキーボード限定になってしまいました。
ゲームパッド対応も実装したいことの一つだったのでちょっと残念でした。
追記:このページにもあるように、L/W/J/G/Lというものを使えば実装できそうです。


実装の部分的紹介

・ベース
多分弾幕STGを作るときに調べたら大抵ヒットすることになる「龍神録プログラミングの館」ここを参考にしました。
でも途中から何となくゲームの作り方みたいなのが分かってきたので自分で適当に進めました。
また、弾は毎回弾クラスをnewしてListに突っ込んでいます。
多少コストがかかるかもしれませんが、こっちのほうが好みだったのでこの方法を優先しました。
上で挙げたインベーダーはGC対策としてここを変更しています。
予め必要な弾の数分をnewしてリストに入れておき、その弾が有効かどうかのフラグをつけておくって感じで。

・音
AudioSystemを使って複数の音を同時に流せるようにしてあります。ちょっと苦労した。
こちらのサイトを参考にして作成しましたが、いつか自分でもこれについて記事を書くかもしれません。

・60FPSの仕組み
こちらのサイト」を参考にしました。
よく考えて作ってるなあと感心します。ただし多分このまま使うと問題が起きます。

・シーン切り替え
JPanelをaddしたりremoveしたりしています。
シーン切り替え用のレイアウトもあるようですが、今回はこの方法にしました。

・データの保存
シンプルにシリアライズしています。別にバイナリいじって凄い記録作ってくれて構いません。特にチェックサムとかはないので。
リプレイも毎フレームのキー入力を保存しているだけです。

・リソースとか
同じパス上のresフォルダにあるものを使うので、差し替えてもそのままプレイされます。
ただし必要なリソースがない場合には起動しないと思います。
画像のサイズから当たり判定を生成しているので、円系ならそのままバランスよくプレイできるかも。

個人的な感想
初めてちゃんとしたゲーム作れて非常に嬉しかったです。
音源を自分で作れなかったのはちょっと残念ですが、それ以外を全て自分で作れたので達成感あります。
疲れました。
Javaでゲームを作る人が少ないのか分からないところググっても情報が少なく結構苦労しました。
なんで、もし何か質問あれば気軽にどうぞ。分かる範囲で答えます。

何かあったら
ゲームに関して感想・不具合があれば→コチラの記事にコメントお願いします。
ゲームの製作の方に質問・ご意見があれば→この記事にコメントお願いします。

しつこくもう一度ゲームのあるページへのリンク
 

コメントの投稿

非公開コメント


筆者プロフィール

自作ゲーム「さくらともうひとつの審判」
カテゴリ
リンク
月別アーカイブ
ブログ内検索