Visual Studio 2017 でLquidFunを動作させるまで
概要
この記事ではLiquidFunをVisual Studio 2017で動作させる手順を記す。言語はC++。LiquidFunとはGoogleが作った流体シミュレーションが可能な物理エンジンで、Box2Dの機能拡張版である。あくまで動作させるのはLiquidFunだけなので描画に関してはこの記事では扱わない。
環境
Windows10
Visual Studio 2017 のダウンロード&インストール
LiquidFunのダウンロード
このページからダウンロードする。
https://github.com/google/liquidfun/releases/tag/v1.1.0
ページ一番下のAssetsのliquidfun-x.x.x.zipをダウンロード。
LiquidFunのビルド
ビルドにはふつうCMakeというものを使うらしいが、使わなくてもVisual Studioだけでできたので今回はこちらの方法を使う。できない場合は
http://freesoft-48784.hatenablog.com/entry/2018/09/01/043454
この記事あたりを参考にして頑張る。
ダウンロードしてきたzipファイルを解凍する。(7-zip等の解凍ソフトを使う)
その後liquidfun-x.x.x/liquidfun/Box2DにあるBox2D.slnを開く。(Visual Studio 2017で開くはず。開かない場合は右クリック→プログラムから開くでVisual Studio 2017を選択)
するとソリューション操作の再ターゲット画面が表示される。特にいじらずOKを押して良い。
Visual Studioの出力画面で再ターゲットが正常に終了した事を確認すること。
続いてソリューションエクスプローラーの「Box2D」プロジェクトを右クリックしてプロパティを選択。
「C/C++」の「全般」の中にある警告をエラーとして扱うを「いいえ(/WX-)」に変更する。
変更したらOKを押してプロパティウィンドウを閉じ、もう一度「Box2D」プロジェクトを右クリックして「ビルド」を選択。ビルドが始まるのでしばらく待ち、正常終了を確認する。
これによりliquidfun-x.x.x/liquidfun/Box2D/Box2D/Debugにliquidfun.libファイルが生成されたはず。これはデバッグ用のライブラリファイルなのでリリース用が欲しい場合は設定をReleaseに切り替えて同じ手順を踏み生成すること。
LiquidFunの動作確認
LiquidFunが正常に動作するかを確認する。確認するだけなのでこの項は必須ではない。必要ない場合はこの項は読み飛ばして良い。
ソリューションエクスプローラーの「Testbed」プロジェクトを上記と同様の手順でビルドする。
正常終了を確認したらもう一度「Testbed」プロジェクトを右クリックし、「スタートアッププロジェクトに設定」を選択する。
そしてツールバーの「ローカルWindowsデバッガー」をクリックするとTestbedが実行される。TestbedはLiquidFunのサンプルプログラムで色々な使い方が紹介されている。結構遊べる。
プロジェクトにLiquidFunを導入する
Visual Studio 2017を再起動し、新しいプロジェクトを作成する。(Visual C++のからのプロジェクトを作るのが無難)
続いてプロジェクトのフォルダを開き、プロジェクト名.slnが置いてあるフォルダにliquidfun-x.x.x/liquidfun/Box2D/Box2Dフォルダをコピーする。Box2Dフォルダは二つあるので注意すること。下の階層のものが正解。
次にVisual Studioに戻り、ソリューションエクスプローラーのソリューション名を右クリック(プロジェクト名の上にある)→「追加」→「既存のプロジェクト」を選択する。
そして先ほどコピーしたBox2Dフォルダ内のBox2D.vcxprojを指定する。
これで「Box2D」プロジェクトがソリューションエクスプローラー内に表示されたはずである。
次に自分で作ったプロジェクトのプロパティを開き、「C/C++」→「全般」→「追加のインクルードディレクトリ」を押して右端の下向き矢印(v)を押して「<編集...>」を選択。「新しい行」のアイコンを押して右の「...」を選択するとディレクトリの選択画面が開くため、プロジェクトのフォルダ(プロジェクト名.slnファイルが入っているフォルダ)を指定する。
続けてプロパティの「リンカー」→「全般」→「追加のライブラリディレクトリ」→「<編集...>」→「新しい行(アイコン)」→「...」と先ほどと同じ手順で選択し、コピーしたBox2Dフォルダ内のDebugフォルダを選択する。(リリース版ならReleaseフォルダを選択)
これでLiquidFunの導入は完了。
導入したLiquidFunの動作をチェックする
最後にliquidFunの動作をチェックするため簡単なコードを書いて実行する。
まずはプロジェクト名を右クリックして「追加」→「新しい項目」でmain.cppファイルをプロジェクトに追加する。
次にファイルの行の先頭に
#include <Box2D/Box2D.h>
#pragma comment(lib,"liquidfun.lib")
を書き込む。(この時点でエラーが出ている場合は何かが上手くいっていない)
後はLiquidFunを使ったコードを書くだけ。今回はBox2Dソリューションの中にあったHello Worldプロジェクトのコードをコピーしてきた。
#include <iostream>
#include <Box2D/Box2D.h>
#pragma comment(lib,"liquidfun.lib")
using namespace std;
int main() {
b2Vec2 gravity(0.0f, -10.0f);
b2World world(gravity);
b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0.0f, -10.0f);
b2Body* groundBody = world.CreateBody(&groundBodyDef);
b2PolygonShape groundBox;
groundBox.SetAsBox(50.0f, 10.0f);
groundBody->CreateFixture(&groundBox, 0.0f);
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position.Set(0.0f, 4.0f);
b2Body* body = world.CreateBody(&bodyDef);
b2PolygonShape dynamicBox;
dynamicBox.SetAsBox(1.0f, 1.0f);
b2FixtureDef fixtureDef;
fixtureDef.shape = &dynamicBox;
fixtureDef.density = 1.0f;
fixtureDef.friction = 0.3f;
body->CreateFixture(&fixtureDef);
float32 timeStep = 1.0f / 60.0f;
int32 velocityIterations = 6;
int32 positionIterations = 2;
for (int32 i = 0; i < 60; ++i)
{
world.Step(timeStep, velocityIterations, positionIterations);
b2Vec2 position = body->GetPosition();
float32 angle = body->GetAngle();
//printf("%4.2f %4.2f %4.2f\n", position.x, position.y, angle);
cout << position.x << " " << position.y << " " << angle << "\n";
}
system("pause");
return 0;
}
※テスト用のコードなのでコメント行や空行をほぼ消しています。
これを「ローカルWindowsデバッガー」で実行すればコンソールにボックスが落下する様子が表示される。
Hello Worldコードの詳細については公式リファレンスを参照。
参考資料
Author And Source
この問題について(Visual Studio 2017 でLquidFunを動作させるまで), 我々は、より多くの情報をここで見つけました https://qiita.com/chappy4132/items/90bef67f5c1a1d36967b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .