Я следую этому уроку , чтобы создать стрелку в моей игре.Однако я понятия не имею, почему моя стрела будет висеть на небе в основном после того, как она начнет падать.
Мои коды создания тела следующие:
BodyDef def = new BodyDef();
FixtureDef fixtureDef = new FixtureDef();
def.type = BodyDef.BodyType.DynamicBody;
def.position.set( 0 , 5);
PolygonShape polygonShape = new PolygonShape();
Vector2 vertices[] = new Vector2[]{
new Vector2(-this.getWidth()/2 ,0), // create width of half length
new Vector2(getWidth()/2 - arrowHeadLength ,-getHeight()/5f),
new Vector2(getWidth()/2 ,0),
new Vector2(getWidth()/2 - arrowHeadLength ,getHeight()/5f)};
polygonShape.set(vertices);
fixtureDef.shape = polygonShape;
fixtureDef.density = 1f;
Body box = world.createBody(def);
box.createFixture(fixtureDef);
polygonShape.dispose();
body = box;
body.setTransform(body.getPosition().x,body.getPosition().y,0 * MathUtils.degreesToRadians);
body.setAngularDamping(1);
body.setAwake(false);
обновить коды деталей:
pointingDirection = body.getWorldVector(arrowPoitningDirection); //arrowPoitningDirection = new Vector2(1,0);
flightDirection = body.getLinearVelocity();
float flightSpeed = flightDirection.nor().len();//normalizes and returns length
//float dot = Vector2.dot(flightDirection.x,flightDirection.y,pointingDirection.x,pointingDirection.y);
float dot = flightDirection.dot(pointingDirection);
float dragForceMagnitude = (1 - Math.abs(dot) * flightSpeed * flightSpeed * dragConstant * body.getMass());
arrowTailPos = body.getWorldPoint(arrowTailPointingPos); // arrowTailPointingPos = new Vector2(-getWidth()/2 , 0);
body.applyForce( flightDirection.scl(-dragForceMagnitude), arrowTailPos, false);
Я не знаю, где я ошибаюсь.Пожалуйста, помогите.