Box2D 2.2.1在VS2008下的编译
来源:互联网 发布:张大大主持的网络节目 编辑:程序博客网 时间:2024/06/05 06:45
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),按如下图配置:
4.然后按下"Generate"按钮;
5.就可以在"Build"目录下,用VS2008打开"Box2D.sln";
6.编译生成项目,运行Testbed项目,如下图所示:
Hello World工程介绍了如何使用Box2D,这个是没有图形界面,需要在控制台看到输出。
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;
}
#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;
}
收集一些网上翻译的中文手册,下载地址:http://download.csdn.net/detail/akof1314/4789339
- Box2D 2.2.1在VS2008下的编译
- box2d 2.0.1在vs2008下的配置与第一个程序
- Box2D在Visual Studio 2008环境下的编译
- KevinLib 在 VS2008 下的成功编译
- Boost在VS2008下的正确编译
- Boost在VS2008下的正确编译
- SNMP++在vs2008下的编译
- SNMP++在vs2008下的编译
- SNMP++在vs2008下的编译
- SNMP++在vs2008下的编译
- 在VS2008下编译sqlite3
- mediastreamer2在VS2008下编译
- box2d 在ubuntu 上面的编译过程
- code::blocks在vs2008下编译的一个问题
- Qt在vs2008下的配置及meshlab编译
- TrueCrypt简介、在VS2008下的编译过程
- SNMP++开发包介绍和在VS2008下的编译
- 史上最简单的X264在VS2008下编译
- VS2010中 C++创建DLL图解
- Microsoft Internet Explore 不支持css3 pointer-events:none; 提供了msElementFromPointer/msElementFromRect 方法
- Android 面试题(有详细答案)
- vim 光标移动笔记
- CMFCToolBar 设置文本显示
- Box2D 2.2.1在VS2008下的编译
- 黑马程序员 ---Java加强_基本数据的自动拆装箱及享元设计模式,javabean
- android:动态创建多个按钮 并给每个按键添加监听事件
- 关于一本书的《Oracle大型数据库系统在AIX/UNIX上的实战详解(第2版)》实在想说说。。。
- powerDesign
- Spring的JDBCTemplate
- 在线安装eclipse cdt的地址
- undefined reference to" 问题解决方法
- SQL中IN和EXISTS用法的区别