Libgdx 中的 Arrow Box2d Physic

Arrow Box2d Physic in Libgdx

我正在跟随 this tutorial 在 Libgdx 中创建箭头物理。但是我的箭头工作起来很奇怪,我怀疑我对阻力的计算是造成问题的原因……我不熟悉 C++ 编程,我真的不知道我哪里做错了。

谁能帮我看看哪里错了?

教程代码(C++):

  b2Vec2 pointingDirection = arrowBody->GetWorldVector( b2Vec2( 1, 0 ) );
  b2Vec2 flightDirection = arrowBody->GetLinearVelocity();
  float flightSpeed = flightDirection.Normalize();//normalizes and returns length

  float dot = b2Dot( flightDirection, pointingDirection );
  float dragForceMagnitude = (1 - fabs(dot)) * flightSpeed * flightSpeed * dragConstant * arrowBody->GetMass();

  b2Vec2 arrowTailPosition = arrowBody->GetWorldPoint( b2Vec2( -1.4, 0 ) );
  arrowBody->ApplyForce( dragForceMagnitude * -flightDirection, arrowTailPosition );

我的代码(java):

pointingDirection = body.getWorldVector(arrowPoitningDirection);
flightDirection = body.getLinearVelocity();
float flightSpeed = flightDirection.cpy().nor().len();//normalizes and returns length

float dot = Vector2.dot(flightDirection.x,flightDirection.y,pointingDirection.x,pointingDirection.y);
float dragCons = 0.5f;
float dragForceMagnitude = (1 - Math.abs(dot)) * flightSpeed * flightSpeed * dragCons * body.getMass();

arrowTailPos = body.getWorldPoint(arrowTailPointingPos);
body.applyForce( flightDirection.scl(dragForceMagnitude) , arrowTailPos, false);

谢谢。

flightDirection.Normalize() 首先是向量的 returns 长度,然后对其进行归一化。 在您的 java 代码 flightDirection.cpy().nor().len() 中,您标准化了当时的 return 长度。归一化向量后,它的长度始终为 == 1(请阅读有关向量的操作)。

只需更改此

flightDirection.cpy().nor().len()

至此

float flightSpeed = flightDirection.len()

flightDirection.nor()