31.ライブラリ作成のすすめ

今回は1つのサンプルをGitHubにアップしましたSimpleSample015です。
ドキュメントは申し訳ないですが、まだ記述してません。少しサンプルがたまった段階でアップします。

この記事は、
コミットSimpleSample011から014まで追加。(Dx11版のみ)
から、
コミットSimpleSample015追加。ライブラリ修正あり
の間の作業です。
GitHubサイト

https://github.com/WiZFramework/BaseCross

を参照して下さい。

今回もDx11版のみのサンプルです。次回からDx12版を追加していく予定です。
今回アップしたサンプルのポイント紹介します。
なお、今回はライブラリも修正していますが、修正部分は、Vector3などです。メンバ関数の実体が抜けていたので追記しました。

SimpleSample015について

SimpleSample015は、少し細かい(というかコード量の多い)サンプルです。
実行イメージは以下になります。

20160823005

XBoxコントローラでプレイヤーを動かすことができます。

たとえシンプルバージョンであってとしても、プログラムコードは階層あるいはランクといった概念が必要です。
階層とはC++のクラス階層のことではありません。コードが、ゲームに直接かかわるのか、あるいは、ライブラリ的要素を含むのか、といった概念です。
例えば、それぞれにテクスチャや形状が違う、VertexPositionNormalTexture型の頂点定義を持つオブジェクトが20種類あったとします。その時、あなたは、それぞれの描画関数を別々に記述しますか?

僕はノーです。だって、ほとんどのOnDraw関数が同じようなコードになることが予想されますから。
そんな場合、例えばPNTStaticDrawというコンポーネントを作って、描画処理は一か所にまとめます。

また、例えば、下向きの重力が常にかかっている世界のゲームを作成するとして、あなたは、それぞれのオブジェクトで重力計算を別々に記述しますか?
僕はノーです。だって重力計算は、ほとんどのケースで同じです。等加速度直線運動という計算は、公式があります。

そんな感じで、このサンプルでは、TeamSharedDx11という共有アイテムプロジェクトを作ってライブラリ的な操作をそこにまとめています。

どこかの記事に書きましたが共有アイテムプロジェクトは本当に便利で、ファイルを追加したり削除したりするのが、そのプロジェクト単位で行うことができるので、ライブラリ(共有するクラスとか関数)を作る人ゲームそのものを作る人に明確に分けられます。
もちろん、Gitなどで、バージョン管理をしっかりすれば必要ないかもしれませんが、それでも(Gitを使用したとしても)、共有アイテムプロジェクトの恩恵はあまりあります。(これまでのVisualC++になぜなかったのか、疑問になるくらい)素晴らしい機能だと思います。

共有アイテムプロジェクトにライブラリ的なものをまとめる場合、コツがあります。ヘッダをまとめるヘッダを作成して、例えばメインのプロジェクトからはそのファイルをインクルードするようにします。
今回のサンプルでは、TeamSharedDx11の中のTeamSharedCommon.hがその役割です。このようなファイルを作成しておくと、そのプロジェクト内のファイルの依存関係は、そのヘッダに記述できるので、さらに便利になります。

今回のサンプルでは、そのような形でライブラリ化しているのはコンポーネント重力アクションゲームオブジェクトです。TeamSharedDx11の中のGameObject.h/cppAction.h/cppに記述があります。
これらは、フルバージョンでも実装予定ですが、その簡易版になります。参考になれば幸いです。

それでは、今回はこの辺で。
次回からは、これまで作ってきたDx11版サンプルDx12版に対応させる作業となります。次回もよろしくお願いします。

カテゴリー

ピックアップ記事

  1. 2016092201
    今回は前回のサンプルを少し機能を追加しまして、いろんなオブジェクトを追加しています。FullTuto…
  2. 2016092001
    前回更新から時間がたってしまいましたが、今回はフルバージョンチュートリアル003をアップしました。内…
  3. eyecatch
    前回更新から時間がたってしまいましたが、今回はフルバージョンチュートリアル002で懸案となっていまし…
PAGE TOP