DirectX講座13回でまとめたプログラムを複数ファイルに分割してみます
13回でまとめた
・Direct3Dクラス
・Textureクラス
・Spriteクラス
・DirectSoundクラス
・Waveクラス
・SoundBufferクラス
を各種ヘッダー(.h)とソース(.cpp)のペアで分割してます
今回使うプログラムファイルは次のようになってます。どぞー(-ω-)つ旦
・direct3d.h
・direct3d.cpp
・texture.h
・texture.cpp
・sprite.h
・sprite.cpp
・directsound.h
・directsound.cpp
・wave.h
・wave.cpp
・soundbuffer.h
・soundbuffer.cpp
・winmain.cpp
使っている素材はこちら(13回と変更なし)
・car.bmp
・katana.wav
・bomb.wav
zipでほしい人はこちら
・framework.zip
ファイルが一杯ですが処理の方の変更はありません
winmain.cppにWinMain関数があります
13回でまとめたクラスを全て別ファイルに分割しました
winmain.cppで分割したクラスのヘッダーを全てインクルードします
クラスを使うところの処理はまったく変わりません
#include <Windows.h> #include <tchar.h> // 作ったヘッダーファイルを全部インクルード #include "direct3d.h" #include "texture.h" #include "sprite.h" #include "directsound.h" #include "wave.h" #include "soundbuffer.h" // ウィンドウプロシージャ、ウィンドウに対するメッセージ処理を行う LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) // ここより後のプログラムは13回とまったく変わらないので略・・・
分割したファイルですが
ヘッダーファイルには先頭に#pragma onceを書き
DirectXのヘッダーライブラリをインクルードし
クラス定義します
direct3d.hとdirect3d.cppを例にあげます
direct3d.hは次のようになります
#pragma once ////////////////////////////////////////////////////////////// // Direct3Dのヘッダーとライブラリ #define D3D_DEBUG_INFO // Direct3Dデバックフラグ #pragma comment(lib, "d3d9.lib") #pragma comment(lib, "d3dx9.lib") #pragma comment(lib, "d3dxof.lib") #pragma comment(lib, "dxguid.lib") #pragma comment(lib, "winmm.lib") #include <comdef.h> #include <d3d9.h> #include <d3dx9.h> #include <mmsystem.h> ////////////////////////////////////////////////////////////// // Direct3Dクラス class Direct3D { // クラスのメンバは13回と同じなので以下略
DirectX系のヘッダーファイルとライブラリは
各ヘッダーファイルごとに読み込まなければならないのでそこだけ追記します
どこかに各クラスのメンバ関数の実装をしなければならないため
ソースファイルを作成し、そこにクラスのメンバ関数を実装します
各クラスの定義が書かれたヘッダーファイルを読み込まなければメンバ関数が実装できません
今回、Direct3Dクラスの実装はdirect3d.cppに書きました
#include "direct3d.h" // コンストラクタ Direct3D::Direct3D(){ // クラスのメンバ関数の実装は13回と変更がないので以下略
他のクラスも同様に分割してあります
これは個人的な意見ですが1クラスに対し
クラスを定義するヘッダーファイルとそのクラスの実装のソースファイルをペアで作るといいと思います
そのほうが見やすいしファイルを探しやすいと思うので・・・
(こうしなければならない決まりはない)
結果は13回と変わらないので省略します