2013-12-15 3 views
2

У меня возникли вопросы относительно вершин моей формы. Происхождение находится в верхнем левом углу (0,0), когда я устанавливаю положение телаDef в 1, 1 bodyDef.position.set(position.x, position.y), тело выполняет диагональный перевод, применяя вектор (1,1), и я не понимаю, почему ... можешь мне помочь ?Проблемы с рисованием и движущейся фигурой

public class Player { 
    private Body body; 

    public Player(World world, Vec2 position) { 
     BodyDef bodyDef = new BodyDef(); 
     bodyDef.position.set(position.x, position.y); 
     bodyDef.type = BodyType.DYNAMIC; 

     PolygonShape shapeShip = new PolygonShape(); 

     Vec2[] verticesShip = { 
       new Vec2(0.0f, -10.0f), 
       new Vec2(10.0f, 10.0f), 
       new Vec2(-10.0f, 10.0f) 
     }; 

     shapeShip.set(verticesShip, verticesShip.length); 

     FixtureDef fixtureDefShip = new FixtureDef(); 
     fixtureDefShip.shape = shapeShip; 
     fixtureDefShip.density = 0.5f; 
     fixtureDefShip.friction = 0.3f; 
     fixtureDefShip.restitution = 0.5f; 

     body = world.createBody(bodyDef); 
     body.createFixture(fixtureDefShip); 
    } 

    public void draw(Graphics2D graphics, int width, int height) { 
     PolygonShape polygonShape = (PolygonShape) body.getFixtureList().getShape(); 

     Vec2[] vertices = polygonShape.getVertices(); 

     for(int i = 0; i < polygonShape.getVertexCount(); i++) { 
      Vec2 vertice = vertices[i]; 

      vertices[i] = body.getWorldPoint(vertice); 

      System.out.println(body.getWorldCenter()); 
     } 

     DrawShape.drawPolygon(graphics, polygonShape.getVertices(), polygonShape.getVertexCount(), Color.WHITE); 
    } 

    public void forward() { 
     Vec2 force = new Vec2(0.0f, 10.0f); 
     Vec2 point = body.getPosition(); 

     body.applyForce(force, point); 
    } 

    public void rotateLeft() { 
     float angle = (float) Math.toDegrees(body.getAngle()) % 360; 

     body.setTransform(body.getPosition(), (float) Math.toRadians(--angle)); 
    } 

    public void rotateRight() { 
     float angle = (float) Math.toDegrees(body.getAngle()) % 360; 

     body.setTransform(body.getPosition(), (float) Math.toRadians(++angle)); 
    } 

    public Body getBody() { 
     return body; 
    } 
} 
+0

1) Пожалуйста, не забудьте добавить '?' на вопросы! Некоторые люди выполняют поиск на странице «?» и если ни один из них не существует в «вопросе», переходите непосредственно к следующему (фактическому) вопросу в очереди. 2) Чтобы получить более эффективную помощь, опубликуйте [SSCCE] (http://sscce.org/). –

ответ

2
public void draw(Graphics2D graphics, int width, int height) { 
    PolygonShape polygonShape = (PolygonShape) body.getFixtureList().getShape(); 

    Vec2[] vertices = polygonShape.getVertices(); 
    Vec2[] verticesTransform = new Vec2[polygonShape.getVertexCount()]; 

    for(int i = 0; i < polygonShape.getVertexCount(); i++) { 
     verticesTransform[i] = body.getWorldPoint(vertices[i]); 

     System.out.println(verticesTransform[i]); 
    } 

    DrawShape.drawPolygon(graphics, verticesTransform, verticesTransform.length, Color.WHITE); 
} 
Смежные вопросы