Arrow Body Hang при падении с неба Libgdx Box2d - PullRequest
0 голосов
/ 03 марта 2019

Я следую этому уроку , чтобы создать стрелку в моей игре.Однако я понятия не имею, почему моя стрела будет висеть на небе в основном после того, как она начнет падать.

Мои коды создания тела следующие:

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);

Я не знаю, где я ошибаюсь.Пожалуйста, помогите.

...