2015-06-21 96 views
1

我想要一个box2d身体跟随鼠标旋转。这是一张图片来阐明我的意思。 enter image description hereBox2d身体跟随鼠标移动

红色和蓝色圆圈是鼠标和身体(相应颜色)的当前点移动/旋转以跟随它。基本上矩形应该旋转,其一端指向鼠标指针所在的位置。

这里是我的代码,到目前为止,

World world; 
    Body body, bullet; 
    Box2DDebugRenderer debugRenderer; 
    OrthographicCamera camera; 

    @Override 
    public void create() { 

     world = new World(new Vector2(0, 0f), true); 
     debugRenderer = new Box2DDebugRenderer(); 
     float w = Gdx.graphics.getWidth(); 
     float h = Gdx.graphics.getHeight(); 

     BodyDef bodyDef = new BodyDef(); 
     bodyDef.type = BodyDef.BodyType.DynamicBody; 
     bodyDef.position.set(10, 10); 
     body = world.createBody(bodyDef); 

     PolygonShape shape = new PolygonShape(); 
     shape.setAsBox(2, 5); 
     FixtureDef fixtureDef = new FixtureDef(); 
     fixtureDef.shape = shape; 
     fixtureDef.density = 1f; 
     Fixture fixture = body.createFixture(fixtureDef); 

     shape.dispose(); 

     Gdx.input.setInputProcessor(this); 

     camera = new OrthographicCamera(200, 100 * (h/w)); 
     camera.position.set(camera.viewportWidth/2f, camera.viewportHeight/2f, 0); 
     camera.update(); 

    } 
@Override 
    public void render() { 

     Gdx.gl.glClearColor(1, 1, 1, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     world.step(Gdx.graphics.getDeltaTime(), 6, 2); 
     camera.update(); 
     debugRenderer.render(world, camera.combined); 
    } 

    @Override 
    public boolean mouseMoved(int screenX, int screenY) { 
     int mouseX = screenX; 
     int mouseY = Gdx.graphics.getHeight() - screenY; 
     float rotateAngle = MathUtils.radiansToDegrees * MathUtils.atan2((float) mouseY - (float) body.getPosition().y, (float) mouseX - (float) body.getPosition().x); 
     body.setTransform(body.getPosition(), rotateAngle/57.2957795f); 
     return true; 
    } 

这里是它现在怎么会出现一个GIF。 enter image description here

正如你所看到的那样,身体变得歪斜,也不能正常旋转。我错过了什么?

回答

0

歪斜看起来像纵横修正,尝试了问题,

camera = OrthographicCamera(200, 100 * (w/h)); 

甚至,

camera = OrthographicCamera(200, 100); 

要获得框的末尾跟随鼠标在图片只是重新定义盒子,

shape.setAsBox(5, 2, Vector2(offset, 0), 0);