2013-10-25 102 views
1

我正在使用正交相机在LibGDX制作2D自上而下的游戏。相机应该跟随玩家,与他一起旋转等。我也使用Box2D,这意味着每个精灵都由模型坐标和角度更新。我想对相机做同样的事情。LibGDX - Orthographic相机翻译和旋转

此代码:

Vector3 v = new Vector3(playerModel.getPosition().x, playerModel.getPosition().y, 0); 
camera.rotateAround(v, Vector3.Z, -playerModel.getAngle() * MathUtils.radiansToDegrees); 
camera.translate(deltaMove); 
camera.update(); 

给我只是相对平移和旋转 - 相对于当前位置和相机的角度。虽然这个作品,我不认为这是最好的,是?:

Vector3 v = new Vector3(playerModel.getPosition().x, playerModel.getPosition().y, 0); 
camera.up.x = (float) Math.cos(playerModel.getAngle()); 
camera.up.y = (float) Math.sin(playerModel.getAngle()); 
camera.position.x = v.x; 
camera.position.y = v.y; 
camera.update(); 

是否有可能与正视相机做平滑的方式还是应该使用classis 3D相机?

+0

您设置了与玩家完全同步的位置和角度。你想如何更流畅? – noone

+0

为什么没有它的setter?我甚至不能改变camera.position矢量(因为它是最终的)只有它的属性,所以我认为这不是设置相机的正确方法。没关系:) – chriemmy

+1

我不知道为什么它是这样的。你仍然可以使用与camera.setPosition(...)基本相同的camera.position.set(...)。我想这是因为这样可以减少正在构建的新“向量”的数量,并节省一个方法调用,这可能会在移动设备上发挥作用。 – noone

回答

0

通过在当前帧的最后一个摄像机属性和新摄像机属性之间插入当前帧的摄像机属性,可以消除摄像机的抖动。如果您不使用某种interpolation,相机运动非常生涩。

我希望这会有所帮助,我会进入如何实现这样的改变,但它似乎有点超出了这个问题的范围。