C++を勉強する題材として読み始めた。が、サンプルコードが動かない(と思う
1章は問題なくビルドできるが、GameLibを使うようになる2章からはライブラリをビルドし直さないと動かないっぽい。で、少しハマったが、結果的にこの手順でうまくいった。
Windowsでの開発自体が初心者で色々ハマったので、同じように普段Macで開発していてC++をこの本で勉強しようと思っている人の参考になればいいなと思う。
基本的にこのブログの手順を参考にさせていただきました。ありがとうございます。
新 「ゲームプログラマになる前に覚えておきたい技術」 VS2010対応
手順は以下の通り
- サンプルコードをダウンロード
- 環境変数の設定
- ライブラリのモジュールのビルド
- ライブラリのビルド
- サンプルコードの実行
タイトルにも書いたけど環境は、
- Windows 10
- Visual Studio Community 2015
サンプルコードをダウンロード
まず、 ゲームプログラマになる前に覚えておきたい技術|サポート|秀和システム
ここからVisual Studio 2012用のGameLib2012.zip
をダウンロードする
それを適当な場所に解凍する。
このとき、半角スペースや+など特殊な文字が含まれていないディレクトリ以下に解凍すること。
とりあえずCドライブや書籍内に書いてあるようにDドライブ直下などがいいと思う。(自分の場合C++
というディレクトリ名以下に解凍していたせいで以下のエラーで失敗していた)
MSB3037 のエラーが出た場合の対処
「ゲームプログラマになる前に覚えておきたい技術」のCDについて - Yahoo!知恵袋
環境変数の設定
次に本の指示と同じように環境変数を設定する 「Windows」アイコンを右クリックし、「システム」を開き、「システムの詳細設定」の「環境変数」から設定する。
ユーザー環境設定の新規から
- 変数:
GAME_LIB_DIR
- 値:
先ほど解凍したディレクトリのパス
(例)C:\GameLib2012
を設定する。 環境変数の反映のさせ方がわからないのでとりあえずこの時点でPCを再起動した。
ライブラリのモジュールのビルド
次に、
GameLib2012\src\GameLibs\Modules\Modules.sln
のソリューションを開く。
このとき、コンパイラとライブラリをアップデートするか訊かれるのでOKにしておく。
- メニューの「ビルド > バッチビルド」を選択
- 「全て選択」をクリック
- 「リビルド」を押してリビルドを開始する。
ここでおそらくminとmaxが見つからないエラーが出る。
エラー C3861 'max': 識別子が見つかりませんでした
これはalgorithm.hをincludeしてないから起きるので、
該当ファイルを開き、
#include <algorithm>
を加える
Visual C++ 2015 で、std に minやmax がないとエラーが出る場合 | Kazuya Ujihara's Blog
もしエラーが出ないで終了した場合、
lib
の中にModules_d.lib
ができていないなら失敗しているので、
「ビルド > Modulesのクリーン」と「ビルド > ソリューションのクリーン」
を実行して再度バッチビルドをしてみると良い気がする。
ライブラリのビルド
最後に、それぞれ勉強したい章のライブラリをビルドする。
ここでは2章に当たる2DGraphics1
をビルドしていく。
GameLib2012\src\GameLibs\2DGraphics1\GameLib.sln
を開く- 「ビルド > ソリューションのビルド」を選ぶ
環境変数の設定がうまくいっていればここでビルドは成功する。しかし、出力を見るとあらかじめ含まれているファイルによってビルドしたファイルがコピーに失敗している。
1> サブディレクトリまたはファイル C:\GameLib2012\2DGraphics1\include は既に存在します。
1> サブディレクトリまたはファイル C:\GameLib2012\2DGraphics1\include\GameLib は既に存在します。
1> サブディレクトリまたはファイル C:\GameLib2012\2DGraphics1\include\GameLib\Base は既に存在します。
…
これは「プロジェクト > プロパティ」の中にある、「ビルドイベント > ビルド後のイベント」で設定されているコマンドのファイルコピーによるもの。
なので、これらのファイルを削除し再度ビルドする。
GameLib2012\2DGraphics1\
以下にある、include
とlib
を削除し、
もう一度ソリューションをビルドする。うまくいけば、きちんとどちらのディレクトリ内にもファイルができているはず。
サンプルコードの実行
これでライブラリのビルドは終わったので、試しにdrawPixels
プロジェクトをビルドしてみる。
GameLib2012\src\02_2DGraphics1\2DGraphics1.sln
を開く- ソリューションエクスプローラーから
drawPixels
を右クリックし、「デバッグ > 新しいインスタンスを開始
」
しばらくするとデバッガーが起動し、ウィンドウが現れる。
お疲れ様でした!
あとは他の章も同様にライブラリをビルドしていけば動くはず。とりあえず3章の途中まではmax
とmin
を使うために#include <algorithm>
を加えるだけでエラーは無くなってビルド出来ていた。
(まだ先の章まで進んでないので他の罠もあるかも)
まとめ
最初はエラーの内容自体がよくわからずに苦戦したが、色々試行錯誤しているうちにWindowsやVisualStudioの設定自体にも慣れてきたので結果的には良かった。が、普通に初心者が勉強し始めるときはこういうところで躓くといきなり心が折られると思うのでこの情報が誰かの役に立てばいいなと思う。Windowsの開発環境構築に関してももう少しまとまったら別途記事を書きたい。
余談: 空のプロジェクトを作って始める場合
「新規作成 > プロジェクト」 を選び、テンプレートからVisual C++
を選択する。
テンプレートがインストールされていない場合、右のパネルからその項目を選んでインストールする。
新規に作る場合は、ここの
「Win32コンソール アプリケーション
」か
「Win32プロジェクト
」から空のプロジェクトを作成することになると思う。