ゲームライブラリ ShinGL4 1.04の新機能(予定)

クロスプラットフォームゲームライブラリShinGL4 の現在開発中の1.04での予定する新機能一覧です。

  • 角度取得にPoint2Dを利用できるように(抽象クラスなので実際には整数はPoint、浮動小数点はPoint.Floatクラスを利用してください)
  • 2点の距離が計測できるように(Point2Dはこの機能があるのであくまでもプリミティブな数値を利用したときにどうぞ)
  • 2つのfloatが同一かの判定(浮動小数点は10進だと正確な数値を表せないため「==」で判定するのはダメ)
  • ゲームフレームワーク

上3つはわかるからいいとして最後のフレームワークが一番わかりにくいかもしれません。

通常ゲーム開発する場合、フレームワークを用意します。Webアプリではやっと最近一般的になりましたが、ゲームのフレームワークはWebアプリが登場するよりもはるかに前からあります。


そこでアクション系で一般的に使われるであろうフレームワークを用意しました。もちろん、これを使わずに自分でゲームループから1から実装してもよいのですが、オブジェクト数が増えてきたりすると対応が難しくなりますのでなんらかのフレームワークを知らず知らずのうちに作成していることでしょう。


基本的な仕組みとしては以下の3つになります。

  • ゲーム内のオブジェクトの「実行」と「描画」をわけること
  • 各オブジェクトへのイベント通知
  • 効果音の発音


ゲーム内の描画と実行をわけるのは当たり前のように実装していることでしょう。フレームバッファ方式でなかった時代は垂直帰線期間に描画を全て行う必要がありました。つまり、分けるのは自然な姿でした。今ではダブルバッファリングをしているので分けなくても実行は可能ですが、描画順とタスクの実行順が一致していない場合も少なくないのでこれを対応するのに必要ですね。ロジックとレンダリングを分けるのはWebアプリでもごくごく当たり前です。


イベント通知はこれまたよく利用する機能です。ゲームオブジェクトに親子の関係があるのはよくあることです。たとえば、ボスとかは破壊可能な砲台など子のオブジェクトとして保持します。たとえば親であるボス本体が破壊された場合、子の砲台も消えなくてはなりません。そういうときにイベントの通知を行います。お前も消えろと。

通常オブザーバパターンとして実装するのが一番無駄がないのですが、実際のところかなり実装が面倒です。インターフェースでなく抽象クラスにすることである程度は解決しますがまた、登録するのも結構だるいです。ゲーム内では1フレームに数百のオブジェクトがあり、これらのイベントの伝播をしていかないといけません。

そこで対象を絞ることなく全てのゲームオブジェクトに通知する方法にしました。各種オブジェクトはそのイベントに応じて自分が処理するべきなのかを判断して実装するシンプルな形にしました。


効果音の発音に関してはたとえば1フレーム内で100個のオブジェクトがボムかなんかで破壊されたとしましょう。100回効果音の発音を呼び出すのはおろかなことです。負担が大きくなりますし、きれいに聞こえない可能性があります。

つまり、効果音は1フレーム内で指定された最後の状態を、最後の状態で各チャンネルに発音させるのです。これも一般的な機能ですね。


フレームワーク自体は今日明日中にも終わる見込みですが(最初の追加機能3種はもう実装終わった)、サンプルプログラムがないとわかりにくいと思うのでフレームワークを実装したサンプルプログラムを用意できたら公開したいと思います。