备注:由于本人最近在学习box2d引擎,而中文资料中好的文章比较少,我就在google上找了一些英文资料。于是,发现了网上的Box2D tutorial系列文章,觉得写得挺好的,于是做了一些翻译和大家分享分享。由于这是我第一次翻译技术型文章,翻译不当的地方还请各位多理解。

下面我给出原文网址:http://www.iforce2d.net/b2dtut/testbed-structure,本系列翻译文章仅用于学习交流之用,请勿用于商业用途。欢迎各位转载!

Testbed结构:

Testbed平台可以让你有效的添加新的测试项目。当定义一个新的测试项目时,我们只需写出要测试的代码部分即可。对于所有的测试,例如创建/摧毁/重置,以及控制面板上的选项框和控制按钮来说功能都是一样的,它们都是由主程序代码来控制,永远不用做修改。

每个测试中的特殊方法—场景应该怎样被创建、鼠标和键盘输入应该做什么等等之类的,都可以作为一种需要。在我们添加测试之前,让我们看看test的生命周期。

 

橙色部分是我们在测试中需要添加和修改的的代码部分。具体点说,我将创建一个Test类的子类,它包括了test的所有公共属性,同时,也对子覆盖子类中的一些函数。让我们看看在Test类中的我们会用到的一些虚函数。

class Test …{

virtual voidStep(Settings* settings);

virtual voidKeyboard(unsignedchar key);

virtual voidMouseDown(constb2Vec2& p);

virtual voidMouseUp(constb2Vec2& p);

step()函数实现了单步计算和场景渲染。其他三个,Keyboard(),MouseDown()和MouseUp()可以让我们获取用户正在操作的信息。这里没有覆盖场景的函数,因为这些都会在子类的构造函数中被完成。

记住:testbed是有一些默认的用户输入的,因此如果这些默认的输入功能(鼠标拖动物体等等)足够了,那么你可能根本就不用去覆盖这些输入函数。同样的,如果你不对渲染或物理控制做任何特别的设置,那么你就不用去覆盖Step()函数。其实,一些测试例子只需使用构造函数就可以创建场景了。我说过这很简单,不是吗…?

还有一些成员变量会在子类中排上用场。这些成员变量记录了Box2D世界中所有物体的信息。例如地表物体,在很多模拟场景中都会用到。我们迟些会看看社么是world和body。

  protected:
      b2World* m_world;
      b2Body* m_groundBody;

 

打赏

发表评论

电子邮件地址不会被公开。