Arrow Box2d Physic в Libgdx - PullRequest
       15

Arrow Box2d Physic в Libgdx

0 голосов
/ 19 марта 2019

Я следую этому руководству , чтобы создать физику стрелок в Libgdx. Но моя стрела работает так странно, что я подозреваю, что мои расчеты dragforce - это то, что создает проблему ... Я не знаком с программированием на 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);

Спасибо.

1 Ответ

3 голосов
/ 16 мая 2019

flightDirection.Normalize () сначала возвращает длину вектора, а затем нормализует ее. В вашем Java-коде flightDirection.cpy (). Nor (). Len () вы нормализуете длину возврата. После нормализации вектора он всегда имеет длину == 1 (ознакомьтесь с операциями с векторами).

Просто измените это

flightDirection.cpy (). Ни (). Len ()

к этому

float flightSpeed ​​= flightDirection.len ()

flightDirection.nor ()

...