gpt4 book ai didi

java - 断言失败 : (d + h * k > 1. 19209290e-7F),函数 InitVelocityConstraints 文件 ... b2MouseJoint.cpp,第 125 行

转载 作者:行者123 更新时间:2023-12-02 04:45:17 24 4
gpt4 key购买 nike

我正在使用 MouseJointlibgdx 中移动主体。它在动态主体上工作得很好,但是在使用某个运动主体时,我遇到了一个奇怪的错误,导致游戏崩溃。错误是:

Assertion failed: (d + h * k > 1.19209290e-7F), function InitVelocityConstraints, file /Users/badlogic/jenkins/workspace/libgdx-mac/extensions/gdx-box2d/gdx-box2d/jni/Box2D/Dynamics/Joints/b2MouseJoint.cpp, line 125.

不幸的是,崩溃时堆栈没有显示,所以我无法提供。该错误似乎与 MouseJoint 创建有关,但我确实在调试中一步步进行,并且创建本身进展顺利(至少看起来如此)。有没有人犯过同样的错误并幸存下来分享他/她的智慧?

创建MouseJoint的代码(如上所述,运行良好。游戏在其他地方崩溃,我不知道在哪里)是:

mTmpMouseJointDef.bodyA = mWorld.createBody(mTmpBodyDef); // Create dummy body
mTmpMouseJointDef.bodyB = b_body;
mTmpMouseJointDef.collideConnected = true;
mTmpMouseJointDef.target.set(pTargetVec.x, pTargetVec.y);
mTmpMouseJointDef.maxForce = 1000.0f * b_body.getMass();
mouseJoint = (MouseJoint)mWorld.createJoint(mTmpMouseJointDef);

最佳答案

您根本无法使用带有运动主体的 MouseJoint 作为 bodyB,这就是导致断言的原因(有关同一问题,请参阅 this other SO post)。

关于您引用的Box2D手册中的部分,它只是指出,一般来说,可以创建两个运动或静态物体之间的关节,但没有效果。但是,对于 MouseJoint 来说,情况并非如此,因为它要求 bodyB 质量非零(在 Box2D all kinematic and static bodies have zero mass 中)。

通过查看 initVelocityConstraints 函数中的代码(来自 JBox2D Github ),我们可以看到:

public void initVelocityConstraints(final SolverData data) {

// some code...

float mass = m_bodyB.getMass();

// Frequency
float omega = 2.0f * MathUtils.PI * m_frequencyHz;

// Damping coefficient
float d = 2.0f * mass * m_dampingRatio * omega;

// Spring stiffness
float k = mass * (omega * omega);

// magic formulas
// gamma has units of inverse mass.
// beta has units of inverse time.
float h = data.step.dt;
assert (d + h * k > Settings.EPSILON);

// some code...

}

如果mass为零,则阻尼系数d和 Spring 刚度k都为零,并且d + h * k 为零,导致断言。

关于java - 断言失败 : (d + h * k > 1. 19209290e-7F),函数 InitVelocityConstraints 文件 ... b2MouseJoint.cpp,第 125 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29722394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com