Box2D 2.2.1在VS2008下的编译


        Box2D是一个用于游戏的2D刚体仿真库。程序员可以使用它, 让游戏中的物体运动起来更真实, 让游戏世界更具交互性。以游戏的角度来看,物理引擎就是一个程序性动画的系统。
官网地址:http://code.google.com/p/box2d/

1.解压Box2D_v2.2.1.zip到文件夹;
2.从http://www.cmake.org/cmake/resources/software.html下载cmake;
3.安装完成后,打开CMake(cmake-gui),按如下图配置:
Box2D 2.2.1在VS2008下的编译_第1张图片
4.然后按下"Generate"按钮;
5.就可以在"Build"目录下,用VS2008打开"Box2D.sln";
6.编译生成项目,运行Testbed项目,如下图所示:
Box2D 2.2.1在VS2008下的编译_第2张图片

Hello World工程介绍了如何使用Box2D,这个是没有图形界面,需要在控制台看到输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <Box2D/Box2D.h>

#include <cstdio>
using  namespace std;

// 这是一个简单的例子,使用Box2D进行构建和运行一个仿真。
// 在这里,我们创建了一个大型地面盒和一个小型动态框。
// 在这个例子中有没有图形。
// Box2D意味着在你的游戏引擎中,和你的渲染引擎一起使用。
int main( int argc,  char** argv)
{
    B2_NOT_USED(argc);
    B2_NOT_USED(argv);

     // 定义重力矢量
    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);

     // 准备仿真。通常情况下,我们使用一个时间步为1/60秒(60Hz)以及10次的迭代。
     // 在大多数的游戏场景,这提供了一个高品质的仿真。
    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);
    }

     // 当世界的析构函数被调用时,所有的物体和关节被释放。
     // 这可能会产生孤立的指针,所以一定要小心你的世界管理。

     return  0;
}
结合官网文档,参看示例代码。上面示例展示了动态盒子降落到地面上的情况,控制台的输入如下:
Box2D 2.2.1在VS2008下的编译_第3张图片
Box2D 2.2.1在VS2008下的编译_第4张图片

收集一些网上翻译的中文手册,下载地址: http://download.csdn.net/detail/akof1314/4789339


你可能感兴趣的:(vs2008,vs2008,vs2008,box2D,box2D)