我正在尝试制作一个玩家(圈子)必须收集一些星星的游戏。星星将处于不同的位置,为了获得星星,玩家必须绘制斜坡才能到达星星。如下图。
红线是用户在屏幕上绘制的位置。
好的,所以我在用户触摸并拖动屏幕时捕获坐标,然后我使用这个坐标为线创建一个ChainShape。问题是在触摸区域附近没有绘制线。如下图。
http://3w-bg.org/game/pic2.PNG
世界和屏幕位置与我的理解不一样。那么我怎样才能将链形线精确地绘制在用户触摸的位置。尝试了camera.project / unproject,但没有帮助。
答案 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);
}