3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Visual Studio 2017 でLquidFunを動作させるまで

Posted at

#概要
この記事では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をダウンロード。
コメント 2019-03-09 150259.jpg
#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を押して良い。
コメント 2019-03-09 151427.jpg
Visual Studioの出力画面で再ターゲットが正常に終了した事を確認すること。
コメント 2019-03-09 151718.jpg
続いてソリューションエクスプローラーの「Box2D」プロジェクトを右クリックしてプロパティを選択。
コメント 2019-03-09 152016.jpg
「C/C++」の「全般」の中にある警告をエラーとして扱うを「いいえ(/WX-)」に変更する。
コメント 2019-03-09 152326.jpg
変更したらOKを押してプロパティウィンドウを閉じ、もう一度「Box2D」プロジェクトを右クリックして「ビルド」を選択。ビルドが始まるのでしばらく待ち、正常終了を確認する。
コメント 2019-03-09 152545.jpg
これによりliquidfun-x.x.x/liquidfun/Box2D/Box2D/Debugにliquidfun.libファイルが生成されたはず。これはデバッグ用のライブラリファイルなのでリリース用が欲しい場合は設定をReleaseに切り替えて同じ手順を踏み生成すること。
##LiquidFunの動作確認
LiquidFunが正常に動作するかを確認する。確認するだけなのでこの項は必須ではない。必要ない場合はこの項は読み飛ばして良い。
ソリューションエクスプローラーの「Testbed」プロジェクトを上記と同様の手順でビルドする。
正常終了を確認したらもう一度「Testbed」プロジェクトを右クリックし、「スタートアッププロジェクトに設定」を選択する。
そしてツールバーの「ローカルWindowsデバッガー」をクリックするとTestbedが実行される。TestbedはLiquidFunのサンプルプログラムで色々な使い方が紹介されている。結構遊べる。
コメント 2019-03-09 154410.jpg
#プロジェクトにLiquidFunを導入する
Visual Studio 2017を再起動し、新しいプロジェクトを作成する。(Visual C++のからのプロジェクトを作るのが無難)
続いてプロジェクトのフォルダを開き、プロジェクト名.slnが置いてあるフォルダにliquidfun-x.x.x/liquidfun/Box2D/Box2Dフォルダをコピーする。Box2Dフォルダは二つあるので注意すること。下の階層のものが正解。
次にVisual Studioに戻り、ソリューションエクスプローラーのソリューション名を右クリック(プロジェクト名の上にある)→「追加」→「既存のプロジェクト」を選択する。
コメント 2019-03-09 155638.jpg
そして先ほどコピーしたBox2Dフォルダ内のBox2D.vcxprojを指定する。
これで「Box2D」プロジェクトがソリューションエクスプローラー内に表示されたはずである。
次に自分で作ったプロジェクトのプロパティを開き、「C/C++」→「全般」→「追加のインクルードディレクトリ」を押して右端の下向き矢印(v)を押して「<編集...>」を選択。「新しい行」のアイコンを押して右の「...」を選択するとディレクトリの選択画面が開くため、プロジェクトのフォルダ(プロジェクト名.slnファイルが入っているフォルダ)を指定する。
コメント 2019-03-09 160714.jpg
続けてプロパティの「リンカー」→「全般」→「追加のライブラリディレクトリ」→「<編集...>」→「新しい行(アイコン)」→「...」と先ほどと同じ手順で選択し、コピーしたBox2Dフォルダ内のDebugフォルダを選択する。(リリース版ならReleaseフォルダを選択)
これでLiquidFunの導入は完了。
#導入したLiquidFunの動作をチェックする
最後にliquidFunの動作をチェックするため簡単なコードを書いて実行する。
まずはプロジェクト名を右クリックして「追加」→「新しい項目」でmain.cppファイルをプロジェクトに追加する。
次にファイルの行の先頭に

main.cpp
#include <Box2D/Box2D.h>
#pragma comment(lib,"liquidfun.lib")

を書き込む。(この時点でエラーが出ている場合は何かが上手くいっていない)
後はLiquidFunを使ったコードを書くだけ。今回はBox2Dソリューションの中にあったHello Worldプロジェクトのコードをコピーしてきた。

main.cpp
#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デバッガー」で実行すればコンソールにボックスが落下する様子が表示される。
コメント 2019-03-09 165609.jpg
Hello Worldコードの詳細については公式リファレンスを参照。
##参考資料
LiquidFun公式リファレンス
LiquidFun + DXライブラリ導入編
プログラム関連の覚え書き集

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?