c++ - Box2d cpp 给出 : box2d expression area > 1. 1 异常

标签 c++ box2d

我有一个奇怪的错误:

#define PTM_RATIO 32
// shape
            b2PolygonShape axleShape;
            axleShape.SetAsBox(20/PTM_RATIO,20/PTM_RATIO);

            // fixture
            b2FixtureDef axleFixture;
            axleFixture.density=0.5;
            axleFixture.friction=3;
            axleFixture.restitution=0.3;
            axleFixture.shape=&axleShape;
            axleFixture.filter.groupIndex=-1;
            // body definition
            b2BodyDef axleBodyDef;
            axleBodyDef.type=b2_dynamicBody;
            // the rear axle itself
            axleBodyDef.position.Set(m_cart->GetWorldCenter().x-(60/PTM_RATIO),m_cart->GetWorldCenter().y+(65/PTM_RATIO));
            b2Body* rearAxle =m_world->CreateBody(&axleBodyDef);
            rearAxle->CreateFixture(&axleFixture);
            // the front axle itself
            axleBodyDef.position.Set(m_cart->GetWorldCenter().x+(75/PTM_RATIO),m_cart->GetWorldCenter().y+(65/PTM_RATIO));
            b2Body* frontAxle=m_world->CreateBody(&axleBodyDef);
            frontAxle->CreateFixture(&axleFixture);

在最后一行我得到异常说: enter image description here

当我把它改成:

axleShape.SetAsBox(40/PTM_RATIO,40/PTM_RATIO);

它可以工作,但尺寸不符合我的需要。 我怎样才能制作小盒子?

最佳答案

这是一个整数除法的例子。当您将 20/PTM_RATIO 传递给 SetAsBox 方法时,这与 20/32 相同,其计算结果为 0

您可以通过将第一行更改为 #define PTM_RATIO 32.0 来解决此问题。末尾的零点应使所有除法表达式的计算结果为小数。

断言“area > 1.192092896E-07”确保形状的面积大于该数字。如果断言失败,程序将不会编译。目前,您传入的半宽和半高均为 0,这意味着矩形的面积将为 0,这会导致断言失败。

关于c++ - Box2d cpp 给出 : box2d expression area > 1. 1 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29321002/

相关文章:

java - 如何使 View 以 body 为中心并增加Y?

java - 如何在 Java 中正确旋转多个对象?

java - 多个夹具的 Box2D 原点

c++ - const int function(); 之间的区别和 int func() 常量;

C++和SDL问题

c++ - 在 C++ 中初始化引用

box2d、setTransform 和碰撞

ios - Contre Jour 中的弹性触手等图形效果

c++ - 通过 QProcess 执行 VBS 从不发出 readyStandardOutPut

c++ - 简单的 C++ 函数——这段代码是 "good"吗?