0 环境

vs: vs2012
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,写入如下内容:

#ifndef FOO_TEST_H
#define FOO_TEST_H#define DEGTORAD 0.0174532925199432957f
#define RADTODEG 57.295779513082320876fclass FooTest: public Test
{public:b2Body* dynamicBody;FooTest(){b2BodyDef myBodyDef;myBodyDef.type = b2_dynamicBody;//start 10 units further to the right, 20 units highermyBodyDef.position.Set(0, 20);myBodyDef.angle = 0;// b2Body* dynamicBody = m_world->CreateBody(&myBodyDef);dynamicBody = m_world->CreateBody(&myBodyDef);b2PolygonShape boxShape;boxShape.SetAsBox(2, 1);b2FixtureDef boxFixtureDef;boxFixtureDef.shape = &boxShape;boxFixtureDef.density = 1;dynamicBody->CreateFixture(&boxFixtureDef);//change the starting position and angledynamicBody->SetTransform(b2Vec2(10, 20), 1);// set the linear velocity and angular velocity of the bodydynamicBody->SetLinearVelocity(b2Vec2(-5, 5));dynamicBody->SetAngularVelocity(-90 * DEGTORAD);//static BodiesmyBodyDef.type = b2_staticBody;myBodyDef.position.Set(0, 10);b2Body* staticBody = m_world->CreateBody(&myBodyDef);staticBody->CreateFixture(&boxFixtureDef);//kinematic bodymyBodyDef.type = b2_kinematicBody;myBodyDef.position.Set(-18, 11);b2Body* kinematicBody = m_world->CreateBody(&myBodyDef);kinematicBody->CreateFixture(&boxFixtureDef);kinematicBody->SetLinearVelocity(b2Vec2(1, 0));kinematicBody->SetAngularVelocity(360 * DEGTORAD);};void Step(Settings* setttings){Test::Step(setttings);m_debugDraw.DrawString(5, m_textLine, "now we have a foo test");m_textLine += 15;b2Vec2 pos = dynamicBody->GetPosition();float angle = dynamicBody->GetAngle();b2Vec2 vel = dynamicBody->GetLinearVelocity();float angularvel = dynamicBody->GetAngularVelocity();m_debugDraw.DrawString(5, m_textLine, "Position:%.3f,%.3f Angle:%.3f", pos.x, pos.y, angle*RADTODEG);m_textLine += 15;m_debugDraw.DrawString(5, m_textLine, "Veloctiy:%.3f, %.3f Angular velocity:%.3f", vel.x, vel.y, angularvel * RADTODEG);m_textLine += 15;for (b2Body* b = m_world->GetBodyList(); b; b = b->GetNext()){b2Vec2 pos1 = b->GetPosition();m_debugDraw.DrawString(5, m_textLine, "Position:%.3f,%.3f", pos1.x, pos1.y);m_textLine += 15;}}static Test* Create(){return new FooTest;}
};#endif

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

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

3.4 运行测试

在vs2012中编译运行,会出现如下界面:

第一个演示的就是我们刚才编写的程序。
基于此就可以根据教程:
http://ohcoder.com/blog/categories/box2d-tutorials/
基于学习Box2D了

如何使用vs来运行box2d中Testbed的案例相关推荐

  1. Box2d学习笔记三:box2d中几个重要的类

    我们已经知道box2d中的唯一物种:刚体,然而仅仅一个刚体对象并不能完成相应的物理模拟.如果看过box2d的帮助文档就知道,b2Body中提供的函数和属性中,并没有我们需要的物理属性,可以回忆一下,我 ...

  2. Box2D中切割刚体效果的实现一览(二)

     我们继续来实现切割效果. 我们现在有了切割线和多边形,可以利用Box2d的射线投射(RayCast)来检测切割线和多边形的交点(入射点).在Box2d中通过定义b2RayCastCallback ...

  3. Box2d中使用b2Separate开源代码创建凹多边形及其算法分析

     我们知道,在Box2d中默认只能创建凸多边形,如果我们定义的顶点不小心形成了一个凹多边形,那么凹面部分的法线会存在问题,并且在物理模拟的时候会有问题(比如检测不到碰撞等等). 要想直接创建凹多边 ...

  4. 【Dlib】在GPU环境中运行dlib中的例子dnn_mmod_ex报错...dlib::cuda_error...Error while calling cudaMalloc...

    1.问题描述 在GPU环境下运行dlib中的例子dnn_mmod_ex时,报错: terminate called after throwing an instance of 'dlib::cuda_ ...

  5. 操作系统中进程并发运行的过程_三种电磁流量计运行过程中常见故障解决详情!...

    原标题:三种电磁流量计运行过程中常见故障解决详情! 昨天给大家介绍了电磁流量计的一些典型故障,今天我们继续来谈电磁流量计的故障问题!电磁流量计在正常的保养与维护之后,在正常使用的过程中依旧是会因为当时 ...

  6. 程序运行过程中遇到“ORA-03114: not connected to ORACLE”的问题解决

    程序运行过程中遇到"ORA-03114: not connected to ORACLE"的问题解决 参考文章: (1)程序运行过程中遇到"ORA-03114: not ...

  7. python运行过程中会被编译成二进制_Python代码在运行过程中,会被编译成二进制代码。_学小易找答案...

    [单选题]1. ( )是违反设备安全操作规程的错误做法. [单选题]Thank you for your letter ___________ 24th March. (1.0分) [单选题]超外差接 ...

  8. Intel Realsense D435 当摄像头运行过程中突然USB线断开,对RuntimeError: Frame didn't arrived within 5000的异常捕获及处理

    如图,在摄像头运行过程中,摄像头突然断开,可能设备需要对异常进行捕获并处理(如摄像头重连,发出警报,发送信号给车辆让它停止前进等) 需阅读,python异常捕获及处理 191225 通过捕获所有异常, ...

  9. 小程序执行运行过程原理_活性污泥法基本原理、净化反应过程、工艺类型和运行过程中存在的问题...

    ↑ 点击上方"表面活性剂平台"关注我们 活性污泥法实质上是天然水体自净作用的人工强化,能从污水中去除溶解态和胶体态的可生物降解有机物以及能被活性污泥吸附的悬浮固体和其他物质,具有对 ...

最新文章

  1. 如何用纯 CSS 创作一个同心圆弧旋转 loader 特效
  2. 【直播】陈信达:零基础计算机视觉之机器学习基础
  3. Linux ubuntu中怎么生成随机数,随机数的生成
  4. Educational Codeforces Round 50 (Rated for Div. 2)的A、B、C三题AC代码
  5. 超图 iServer服务体系学习
  6. [vue-element] ElementUI怎么修改组件的默认样式?
  7. REVERSE-COMPETITION-HGAME2022-Week4
  8. js获取html样式属性,js怎么获取指定css属性的值?
  9. pcp pmda mysql_linux下的mysql的安装
  10. Python实现中文文档的简体与繁体互相转换
  11. python怎么读发音百度翻译-python selenium 爬取百度翻译单词音标-Go语言中文社区...
  12. 原来竟然还有这种局部变量!
  13. 数字信号处理的fpga实现_FPGA提高雷达性能,实现脉冲压缩
  14. ab并发测试post请求传参
  15. 浮动时间怎么计算_软考学习第21天-----软考案例分析的计算题
  16. Linux7清空回收站,centos rm回收站
  17. python实现批量变更阿里云DNS解析记录状态
  18. 做淘宝优惠券怎么线上引流?淘宝客优惠券如何引流?
  19. 【杂篇 · 技巧】Typora 快捷键整理
  20. HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理

热门文章

  1. 【Docker】容器的几种网络模式
  2. Go 学习笔记(67)— Go 并发安全字典 sync.Map
  3. Git 常用操作(6)- 推送到远程仓库(git push)删除远程分支(git push origin --delete)
  4. flask_模拟请求post,get
  5. Pytorch两种模型保存方式
  6. tf.placeholder函数说明
  7. 模型压缩95%:Lite Transformer,MIT韩松等人
  8. 数据治理(三):数据质量管理
  9. 大数据调度平台Airflow(三):Airflow单机搭建
  10. 2021年大数据ELK(十一):Elasticsearch架构原理