如何使用vs来运行box2d中Testbed的案例

超、凢脫俗 2022-04-05 12:42 241阅读 0赞

0 环境

  1. vs: vs2012
  2. box2d: Box2D_v2.1.2

1 得到box2d编译版本

可以参考:
https://blog.csdn.net/sty945/article/details/83823976

现在我们得到一个可以用vs2012打开的box2d版本,用vs2012打开如下图所示:
在这里插入图片描述

2 运行Testbed的项目

在这里插入图片描述将testbed项目设置成启动项目,然后F7编译, Ctrl+F5运行就可以得到如下界面:
在这里插入图片描述

我们可以做一些演示练习

3 基于Testbed项目编写程序

推荐一个box2d教程:
http://ohcoder.com/blog/categories/box2d-tutorials/

我们如何编写自己的程序呢?
在vs2012中直接添加文件是不对的,添加文件只会添加到build目录下,必须要和原始文件在同一目录下才可以,以下是我采用的方法:

3.1 采用vscode打开源代码

路径是…\Box2D_v2.1.2\Box2D文件夹,会得到如下的界面:
在这里插入图片描述

3.2 打开testbed文件夹

在这里插入图片描述

3.3 创建测试

Testbed/Tests文件夹下面,添加自己创建的.h头文件,如创建一个FooTest.h,写入如下内容:

  1. #ifndef FOO_TEST_H
  2. #define FOO_TEST_H
  3. #define DEGTORAD 0.0174532925199432957f
  4. #define RADTODEG 57.295779513082320876f
  5. class FooTest: public Test
  6. {
  7. public:
  8. b2Body* dynamicBody;
  9. FooTest()
  10. {
  11. b2BodyDef myBodyDef;
  12. myBodyDef.type = b2_dynamicBody;
  13. //start 10 units further to the right, 20 units higher
  14. myBodyDef.position.Set(0, 20);
  15. myBodyDef.angle = 0;
  16. // b2Body* dynamicBody = m_world->CreateBody(&myBodyDef);
  17. dynamicBody = m_world->CreateBody(&myBodyDef);
  18. b2PolygonShape boxShape;
  19. boxShape.SetAsBox(2, 1);
  20. b2FixtureDef boxFixtureDef;
  21. boxFixtureDef.shape = &boxShape;
  22. boxFixtureDef.density = 1;
  23. dynamicBody->CreateFixture(&boxFixtureDef);
  24. //change the starting position and angle
  25. dynamicBody->SetTransform(b2Vec2(10, 20), 1);
  26. // set the linear velocity and angular velocity of the body
  27. dynamicBody->SetLinearVelocity(b2Vec2(-5, 5));
  28. dynamicBody->SetAngularVelocity(-90 * DEGTORAD);
  29. //static Bodies
  30. myBodyDef.type = b2_staticBody;
  31. myBodyDef.position.Set(0, 10);
  32. b2Body* staticBody = m_world->CreateBody(&myBodyDef);
  33. staticBody->CreateFixture(&boxFixtureDef);
  34. //kinematic body
  35. myBodyDef.type = b2_kinematicBody;
  36. myBodyDef.position.Set(-18, 11);
  37. b2Body* kinematicBody = m_world->CreateBody(&myBodyDef);
  38. kinematicBody->CreateFixture(&boxFixtureDef);
  39. kinematicBody->SetLinearVelocity(b2Vec2(1, 0));
  40. kinematicBody->SetAngularVelocity(360 * DEGTORAD);
  41. };
  42. void Step(Settings* setttings)
  43. {
  44. Test::Step(setttings);
  45. m_debugDraw.DrawString(5, m_textLine, "now we have a foo test");
  46. m_textLine += 15;
  47. b2Vec2 pos = dynamicBody->GetPosition();
  48. float angle = dynamicBody->GetAngle();
  49. b2Vec2 vel = dynamicBody->GetLinearVelocity();
  50. float angularvel = dynamicBody->GetAngularVelocity();
  51. m_debugDraw.DrawString(5, m_textLine, "Position:%.3f,%.3f Angle:%.3f", pos.x, pos.y, angle*RADTODEG);
  52. m_textLine += 15;
  53. m_debugDraw.DrawString(5, m_textLine, "Veloctiy:%.3f, %.3f Angular velocity:%.3f", vel.x, vel.y, angularvel * RADTODEG);
  54. m_textLine += 15;
  55. for (b2Body* b = m_world->GetBodyList(); b; b = b->GetNext())
  56. {
  57. b2Vec2 pos1 = b->GetPosition();
  58. m_debugDraw.DrawString(5, m_textLine, "Position:%.3f,%.3f", pos1.x, pos1.y);
  59. m_textLine += 15;
  60. }
  61. }
  62. static Test* Create()
  63. {
  64. return new FooTest;
  65. }
  66. };
  67. #endif

然后在同一目录下的TestEntries.cpp文件添加如下两行代码:

  1. #include "FooTest.h"
  2. {"Foo test", FooTest::Create},

在这里插入图片描述

3.4 运行测试

在vs2012中编译运行,会出现如下界面:
在这里插入图片描述
第一个演示的就是我们刚才编写的程序。
基于此就可以根据教程:
http://ohcoder.com/blog/categories/box2d-tutorials/
基于学习Box2D了

发表评论

表情:
评论列表 (有 0 条评论,241人围观)

还没有评论,来说两句吧...

相关阅读

    相关 初识 Box2D世界

    本文你可以初步认识下这个强大的物理引擎,你将会学到创建一个简单的Box2D应用基本流程,了解b2World物理世界,这个世界力的基本作用 --- 重力,以及如何开启Box2D调