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