Libgdx chainhape的位置

时间:2013-11-19 12:31:31

标签: java libgdx

我正在尝试制作一个玩家(圈子)必须收集一些星星的游戏。星星将处于不同的位置,为了获得星星,玩家必须绘制斜坡才能到达星星。如下图。

http://3w-bg.org/game/pic.PNG

红线是用户在屏幕上绘制的位置。

好的,所以我在用户触摸并拖动屏幕时捕获坐标,然后我使用这个坐标为线创建一个ChainShape。问题是在触摸区域附近没有绘制线。如下图。

http://3w-bg.org/game/pic2.PNG

世界和屏幕位置与我的理解不一样。那么我怎样才能将链形线精确地绘制在用户触摸的位置。尝试了camera.project / unproject,但没有帮助。

1 个答案:

答案 0 :(得分:3)

通常在使用Box2D时,您应该定义某种像素与米的比率。这样做是为了保持物理世界中的坐标更小以保持数值稳定性。

使用Camera和常量PIXEL_TO_METER转换值时,您可以像这样转换坐标:

public static Vector2 screenToPhysics(Camera camera, Vector2 screenPos) {
    Vector3 worldPos = camera.unproject(new Vector3(screenPos.x, screenPos.y, 0));
    return new Vector2(worldPos.x, worldPos.y).scl(1f / PIXEL_TO_METER);
}

public static Vector2 physicsToScreen(Camera camera, Vector2 physicsPos) {
    Vector3 worldPos = new Vector3(physicsPos.x, physicsPos.y, 0).scl(PIXEL_TO_METER);
    Vector3 screenPos = camera.project(worldPos);
    return new Vector2(screenPos.x, screenPos.y);
}