ゲームプログラマーになる前に覚えておきたい技術のサンプルプロジェクトをVisual Studio 2019で動かした備忘録

ゲームプログラマーになる前にという書籍はとても良書なのだが、なにぶんちょっと古い書籍のためサンプルプロジェクトが最新の環境で動作しないようなので、Windows 10 Visual Studio 2019において、以下から取得したVisual Studio 2012用のプロジェクト起動する事にチャレンジしてみることにする。

GameLib2012.zip

環境

  • Visual Studio InstallerよりVisual Studio 2019をインストールしていること

  • ワークロードタブより、C++によるデスクトップ開発にチェックを入れ導入していること

    (これがないとC/C++による開発ができない) f:id:kazumichi96:20210305005524p:plain

まとめ

以下備忘録に実際にあれこれした流れを書いているが、とりあえずこれやれば動かせるであろうという事をまとめる。

  • 環境変数の設定 書籍にもあるけど、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)

  • 以下のダイアログがでる

f:id:kazumichi96:20210305005726p:plain

もしソリューション操作の再ターゲットダイアログが表示されなければ、ソリューションエクスプローラーでソリューションを右クリック→プロジェクトの再ターゲットを選択すればいい。

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.libGameLib_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などに名前を変えてしまえば

とりあえず動作するので、サンプルを動かすだけなら暫定対処だがかまわないだろう。