気付くと新しい物を作っているというのが、私のよくあるパターンなのですが、この2週間ほどはHTML5でのゲーム制作の勉強ということで、「HTML5用ゲームエンジン」を作成していました。
これまでも何度か、Javaで自前ゲーム開発ライブラリを作っていたのですが、そのJavaScript版です。これまでの経験を生かした作りになっています。
今回のゲームエンジンは、普通のゲームエンジンと違い、かなり構造化されたライブラリになっています。
そして、アクションゲームというよりは、シミュレーション・ゲームやノベル・ゲームといった、静的なゲームを開発するためのライブラリになっています。
これはまあ、私の普段作っているゲームがシミュレーション・ゲームだからです。
ノベル・ゲームに関しては、ステージ間のイベント・シーン用のノベル・ビューを作ったら、そのままノベル・ゲームに使えそうなものが出来てしまったからです。
まあ、何というか、自分が使いやすいライブラリが一番なわけでして。基本的にアクション・ゲームを作らないので、普通のゲーム・ライブラリに、必要なパーツがほとんどないわけです。
とりあえず、一通り実装できたので、明日ぐらいにでも仮公開しようかなと思います。
さて、このライブラリでできることを、ざっと簡単に書いておきます。
・ループ管理。
・シーン管理。
・描画オブジェクト管理
・画像や音声のリソースの先読み(グローバル系とシーン・ローカル系)。
・デバッグ用コンソール出力。
・PC(マウス)とスマフォ(タッチ)の処理共通化。
・文字列の自動折り返しやタイプライター風表示。
・ボタンやくり返し背景を簡単に作成できる擬似9patch。
そして、このライブラリの肝は描画オブジェクトになります。
ペインターをルートとしたクラス階層を持っており、クリッカブル、ドラッガブル、スクローラブルなどの各種派生クラスがあります。
また、インクルーダブルをセットすることで、オブジェクトのネストが簡単に行えます。なので、スクローラブルの中にマップやユニットを表示するなどといったことが、システマティックにできます。
以下、プリセットで用意している描画オブジェクトです。
・ペインター
・黒背景
・ラベル
・イメージ
・フェード・イン
・フェード・アウト
・クリッカブル
・ボタン
・ボタン画像
・タイプライター
・ドラッガブル
・スクローラブル
・リスト
・マップ
・ダイアログ
・ノベル・ビュー
これで、シミュレーション・ゲームとかなら、ガシガシと作ることができます。
というわけで、最後に開発履歴を掲載しておきます。こんな手順で作成していきました。
2011.08.30
・作成開始。
・チェーン・メソッドの作成。
2011.08.31
・サウンドの読み込み。
・イメージの読み込み。
・イベント。
・クラス構造。
2011.09.01
・ループ処理。
・擬似9patch描画。
・文字列描画。
2011.09.02
・ペインターの実装開始。
・シーンの実装開始。
2011.09.03
・クリッカブル。
・ボタン。
・ドラッガブル。
・フェード・イン、アウト。
・シーン遷移。
・データ入出力。
2011.09.04
・高速化。
・スクローラブル。
2011.09.05
・リストの実装。
・リストの選択。
2011.09.06
・セキュリティ対策。
・ラベルの追加。
・ダイアログの実装。
・タイプライターの実装。
2011.09.08
・インクルーダブルの構造を整理。
2011.09.09
・スクロールの改良。
・内包オブジェクトの完全なネストを実装。
・イメージの実装。
・ノベルビューの基本的な部分を実装。
2011.09.11
・Painterとその継承クラスの初期化の方法を変更。
・クラス構成の整理。
・ノベル・ビューの画像フェード処理を実装。
・ノベル・ビューに、ジャンプとエンドを実装。
・サウンド管理の実装。
・ドラッグアイテムとドロップアイテムの相互参照を実装。
・ノベル・ビューで、指定IDにジャンプする仕様を実装。
・描画子に、廃棄開始命令を実装。
・ノベル・ビューに、描画オブジェクトを直接代入できるように拡張。
2011.09.12
・内包オブジェクトの絶対位置と表示位置を自動計算するメソッドを実装。
・内包オブジェクトの重なり判定を実装。
・当たり判定の実装。
・実験ページに簡単な解説を追加。
2011.09.13
・シーン間でのファイルの読み込みを実装。
・シーン・ローカルでの画像や音声の読み込みに対応。
・ローダー画面の実装。
・フェード・アウトの色を黒に変更。
・マップ描画を実装。
・FireFoxで、再生終了後にシークを0にすると、自動で音が鳴り始めてしまうバグに対応。
・Safariの対応を確認。
・Operaでは音声読み込みをスキップする仕様にする。
・iOSでは音声読み込みをスキップする仕様にする。
・Androidでの動作を確認。
・ライセンス表記を実装。
・仮公開用のドキュメントを作成。