Box2D:给你的Qt程序加上物理引擎(包含windows+linux版)

 
 

原文出处CuteQT:http://www.cuteqt.com/blog/?p=1425

注:本文指在对该文进行了windows版编译的补充说明,另外很感谢CuteQT的撰文者的翻译和共享!

 

看CuteQt博客的,估计大部分人也在看Qt Labs的博客,我也订阅了Qt Labs的博客,不过大部分时间都是过个标题,没有细看。今天有时间再去扫一遍就帖子,发现有个好东西Qt+Box2D被我错过了。

Box2D是一个开源物理引擎,它提供了碰撞,摩擦,加速度(含重力加速度)等物理特效。如果你对物理引擎还没什么概念的话,试玩一下下面这个游戏或者15个最佳Flash物理游戏,你就会明白了。

 

Box2D做为一个物理引擎,它本身并不提供可见的图形界面,但是提供了计算在物理世界中刚体(不会变形的物体)运动(旋转/移动)轨迹数据的能力。所以任何一个带图形界面的程序开发框架都可以使用Box2D提供的数据,将物理特效以直观的方式展现出来。目前javascript/flash/java/Python等都提供了对Box2D的支持。当然Qt也能将Box2D加入进来和Graphics View框架结合,而且因为都是C++代码,这种集成显得非常方便。下面是我在Linux上的一个测试过程.

以下的路径是我的路径,请根据自己情况修改

1. 编译Box2D(linux版)

step1. 项目地址在http://code.google.com/p/box2d,代码下载请点击Box2D_v2.0.1.zip
step2. 解压进入/Box2D_v2.0.1/Box2D目录执行make命令
step2a. 上面的命令会报错/Box2D_v2,提示GL/freeglut.h找不到,在对应的(具体位置为..Box2D_v2.0.1\Box2D\Contrib\freeglut\Makefile)Makefile中修改CFLAGS或者CXXFLAGS加入”-I/media/DISK1_VOL2/Qt/Box2D_v2.0.1/Box2D/Contrib/freeglut”参数(注意是杠哎!)
step2b. 另外一个错误就是提示找不到 memcp之类的函数,只要在Source/Common/b2Settings.h文件中加入”#include <cstring>” 就可以了。
step2c. 编译成功后在Examples下有个演示程序(这里的examples我的电脑没有编译成功,不过只要libbox2d.a文件出来了就可以了),可以打开瞅瞅.地址是Examples/TestBed/Gen/float/testbed或者Examples/TestBed/Gen/fixed/testbed,分别为浮点和定点。
step3. Box2D的手册,请参考http://www.box2d.org/manual.html

 

1. 编译Box2D(windows版)

step1:找到“D:\Qt\Box2D_v2.0.1\Box2D\Build\VC8”,使用VS打开Box2D.sln

step2:编译Box2D solution,之后你会在“D:\Qt\Box2D_v2.0.1\Box2D\Library”里发现有库文件box2d_d.lib生成。



2.在Qt程序中使用Box2D

关键是将Box2D的头文件和库文件路径分别设置到INCLUDEPATH和LIBPATH里,代码细节介绍请看原博客Qt+Box2D实例工程qgv-box2dtar.gz花絮,代码下载后,在windows下解压出来是一个没有后缀名的文件,这里疑惑了半天,后来在linux下查看该文件,才发现他是个.tar压缩文件,晕死,所以,在windows下,给它加个.tar的后缀名,然后用winrar解压即可得到工程文件)。用Qcreator打开工程,修改.pro,然后执行qmake和make就可以了

注意:在main.cpp中加入头文件#include <time.h>

Pro文件参考例子(windwos):

SOURCES += main.cpp

INCLUDEPATH += D:\Qt\Box2D_v2.0.1\Box2D\Include

LIBPATH += D:\Qt\Box2D_v2.0.1\Box2D\Library

LIBS += box2d_d.lib

Pro文件参考例子(linux):

SOURCES += main.cpp

INCLUDEPATH += /media/DISK1_VOL2/Qt/Box2D_v2.0.1/Box2D/Include

LIBPATH +=/media/DISK1_VOL2/Qt/Box2D_v2.0.1/Box2D/Source/Gen/float

LIBS += -libbox2d

 

Windows版运行图(示例演示了很多三角形块穿过黑球掉落到地面的情形)


Linux版运行图(示例演示了很多三角形块穿过黑球掉落到地面的情形)

 

你可能感兴趣的:(linux,qt,休闲,box2D,物理引擎)