昔から車輪の再開発が大好きなので、PHPのフレームワークを作ったり、テンプレートエンジンを作ったり、ゲームエンジンを作ったりしています。

「俺が考えた最強のゲーム」を作る前に「俺が考えた最強のゲームエンジン」を作り始めて、プロジェクトが全部エターなる、というのはよくある話ですよね。

sol.js

昔作作成したゲームエンジンはこちらです。

https://github.com/isdriven/sol.js

自分頑張ったな、と思う反面、今ならこうするな、という部分がたくさん見つかっています。

CrossCode

最近 CrossCode というゲームに感動したんですが、中身が impact.js と NW.js で出来ていたことにショックを受けました。

そこで、「jsでゲームを作成して、公開する」をプロジェクト化しました。

そこはimpact.jsを自分も使うところだ、とは思いますが、これもSAGAでしょう。

Suger.js

sol.js は CanvasとDOMを両方サポートしていましたが、Suger.js は すべてCanvasになります。

まだまだ足りない機能が多すぎるのですが、いったんCanvasに自由に描画する部分が完成したので、公開です。

チュートリアルなどをきれいに付け加えたダウンロードセットなどは配布しない予定ですが、ライセンスはMITです。

ちなみに Sol.js は1349 行。 Suger.js は 140 行 です。

おおよそ 10分の1 になりました。

利用方法は以下のようなコードになります。

Suger.init ではCanvasのID、width、heightを指定し、次の関数で読み込むためのイメージのリストを返します。

すべての読み込みが終了すると、Suger.main で設定された関数が呼ばれます。

mainの中ではまず Suger.put で 持ってきたイメージからインスタンスにし、すべてspriteとしてフレームを指定して描画します。

rotate(回転)、alpha(透明度)、scale(縮尺)、なども指定できます。

さらに Suger.gear でact.countを見て、経過時間でtargetのx,y,rotate,alpha,scaleをコントロールする設計図のインスタンスを作成します。またこのインスタンスはchainで次のアクションを指定できます。

そのインスタンスのfireメソッドで対象に対してアクションを実行できます。

このアクションメソッドは同一のものを何回も適用できます。

コンセプト作り

オレオレライブラリ作成で一番面白いのはコンセプト作りです。

enchant.js などにもみられるように、よくあるライブラリは class … によって基底クラスもしくは基底Entityを継承した設計図を作成し、さらに各機能追加時は基底を継承した新しいクラスを作成し、そのインスタンス化を行い….といった風に、まさにオブジェクト指向なパターンになっていきます。

前回の sol.js はかなりそういった作りになっていたのですが、完全なベースからのヒエラルキーを形作れていないので、結果としてはあまり綺麗に作れていません。

今回は canvasだけしか使わないので、むしろ、そのように作ればきれいかな、とも思いました。

がしかし。

一方で、個人の好みとしては巨大なゴッドクラスが出現しがちなクラスヒエラルキーを作成していくタイプがあまり好きではありません。

こちらは CrossCodeを開発した Radical Fish のブログですが、JSのパフォーマンスについて参考になります。

そういった理由で、今回のライブラリは非常にシンプルな作りになっています。

ここからさらに機能を追加し、いくつかアプリも作成していきます。

TODO

ゲーム作りに必要な機能をこちらに書いていきます。どんどん編集していきます。

・三角関数関連ユーティリティ ある座標への途中座標を求める
・円形衝突判定。円形の衝突判定を行う。
・線分と円の衝突判定。線分と円の衝突判定を行う。
・キーボード操作
・タッチ操作
・コントローラー操作

最終更新: 2022年12月5日