ゲームプログラマーになる前に覚えておきたい技術のサンプルプロジェクトをVisual Studio 2019で動かした備忘録
ゲームプログラマーになる前にという書籍はとても良書なのだが、なにぶんちょっと古い書籍のためサンプルプロジェクトが最新の環境で動作しないようなので、Windows 10 Visual Studio 2019において、以下から取得したVisual Studio 2012用のプロジェクト起動する事にチャレンジしてみることにする。
環境
Visual Studio InstallerよりVisual Studio 2019をインストールしていること
ワークロードタブより、C++によるデスクトップ開発にチェックを入れ導入していること
(これがないとC/C++による開発ができない)
まとめ
以下備忘録に実際にあれこれした流れを書いているが、とりあえずこれやれば動かせるであろうという事をまとめる。
- 環境変数の設定 書籍にもあるけど、GAME_LIB_DIRという名前で、ダウンロードしてきたGameLibを展開した場所にPathを通しておく
- ソリューションが古いので、基本的に全てのソリューション設定はプラットフォームツールをv142に変更する(Windows SDK バージョンはアップグレードなしにしている)
- サンプルプロジェクトで参照しているstaticリンクライブラリがある場合は、まずstaticリンクライブラリをリビルドする。
とりあえずプロジェクトをビルドしてリンクエラーが出たらだいたいstaticリンクライブラリのせいなので、プロジェクト設定ファイルから参照しているライブラリを特定して そのライブラリをリビルドするという事をすればいけると思われます。
備忘録
下記ファイルの文字コードをShift-JISからUTF-8に変更
下記ファイルがShift-JISでエディタによっては文字化けするのでUTF-8に変換
- 2010以降固有の問題について.txt
- この中にあるものについて.txt
- 使用許諾規約.txt
- 問題が起こったら.txt
src/01_FirstGame
ひとまずVisual Studio 2019でソリューションファイル
FirstGame.sln
を開いてみる。(ソリューションファイルを右クリック→プログラムから開く→Visual Studio 2019)
以下のダイアログがでる
もしソリューション操作の再ターゲットダイアログが表示されなければ、ソリューションエクスプローラーでソリューションを右クリック→プロジェクトの再ターゲットを選択すればいい。
Windows SDK バージョン | プラットフォームツール | 起動 |
---|---|---|
アップグレードなし | アップグレードなし | × |
アップグレードなし | v142へのアップグレード | 〇 |
10.0 | アップグレードなし | × |
10.0 | v142へのアップグレード | 〇 |
いろいろ警告は表示されているが、プラットフォームツールをv142へのアップグレードをしておけばとりあえずこのソリューションに含まれるプロジェクトは全て動作した。
プラットフォームツールとは平たく言えば仕様するVisual Studioのバージョンを指定するようなものなので、Visual Studio 2019を使う以上、もともとの2012を指定していたら動かないというはまぁそうだろう。
Windows SDKバージョンは変えても変えなくても動作した、下手に変えると何がおこるかわからないのでとりあえずそのままにしている。
src/02_2DGraphics1
まず環境変数を設定する(これは書籍にも書いてある通り)
GAME_LIB_DIRという名前で、最初にDLしてきたGameLib.zipを展開した先のパスを設定する
最初のプロジェクトと同様にプラットフォームツールはv142にする
ここまではOKだが、残念ながらここから先はちょっとめんどくさいことになった。
依存してるlibファイル
が古くてビルドが通らない。
まずは依存してるlib
をビルドしなおさないと行けなそうだ。
ひとまずsrc/GameLibs/2DGraphics1
をリビルドできればいけそうだが、このソリューションはsrc/GameLibs/Modules
に依存しているっぽいので先にこっちをリビルドする
src/GameLibs/Modules
を開き、プラットフォームツールをv142に再ターゲット- Windows SDKはアップグレードしない
- Debug、Releaseそれぞれでリビルドをする
src/GameLibs/Modules/lib
以下にModules.lib
と`Modules_d.lib
ができる。- 次に以下
src/GameLibs/2DGraphics1
のソリューションを開き、プラットフォームツールをv142に再ターゲット- Debug、Releaseそれぞれでリビルドする
- 出力先がGameLibフォルダ直下の
2DGraphics1/lib
になっているのでここにGameLib.lib
、GameLib_d.lib
ができていればOK
この状態でsrc/02_2DGraphics1
のソリューションを開き実行すると動いた。
多分他のプロジェクトも同様に、まずstaticリンクライブラリが死んでいるので、そちらを先にリビルドすれば動くと思われるので、その他のプロジェクトについては今は調査しないことにする。
モノによってはソースコードを変えないとビルドが通らないケースがあるかもしれないが、その場合は頑張ってエラーを直してリビルドすればいけるでしょう。
追記
Chapter4
GameLib/src/04_RealTime
のソリューションをビルドしたらリンクエラー(MSC_VERの不一致など)が発生
このソリューションに含まれる各種プロジェクトはGameLib/RealTime
に含まれるライブラリを参照しており
このライブラリをリビルドしてやる必要があった。
GameLib/src/GameLibs/RealTime
にあるソリューションファイルを開きリビルドすればOK
Chapter9
入力デバイスの章でJoyStickの入力が受け取れない(Xbox360コントローラー使用)ようだ 入力が受け取れないというかJoyStickをつないでても認識されないっぽい ライブラリ側のコードを見てないので原因は不明だけど、とりあえず現状は認識されない。
Chapter12
12_2DTransformは上記同様の処置を施してもビルドエラーが発生した。
main.cpp
に定義されているround
関数が多重定義になってエラーになる。
(C++のどこかに定義されているround関数とぶつかってる?)
動作させたいプロジェクトのround
関数をround2
などに名前を変えてしまえば
とりあえず動作するので、サンプルを動かすだけなら暫定対処だがかまわないだろう。