【问题标题】:libgdx tiled map get player position in whole map to make a minimaplibgdx 平铺地图获取玩家在整个地图中的位置以制作小地图
【发布时间】:2015-01-27 17:26:15
【问题描述】:

实际上,我使用相机缩放(在我的主相机上使用OrthogonalTiledMapRenderer)绘制了我的平铺地图的一部分。在 box2d 世界中,相机以玩家位置(始终位于屏幕中心)为中心。

// Set camera postion center on player (box2d body) on every update
camera.position.set(player.getBody().getWorldCenter(), 0);

我想创建一个带有第二个摄像头的小地图。一个简单的填充矩形,其中一个点代表玩家在地图上的位置。 所以我创建了一个新相机:

minimapCamera = new OrthographicCamera(1280, 720); // as my main camera
minimapCamera.zoom = 6; // larger zoom
minimapCamera.position.set(-1280 * 2, 720 * 3, 0); // align bottom right corner

我尝试绘制形状:

ShapeRenderer sr = new ShapeRenderer();
sr.setAutoShapeType(true);
sr.setProjectionMatrix(minimapCamera.combined);
sr.begin(ShapeType.Filled);
sr.setColor(0.5f, 0.5f, 0.5f, 0.3f);
// minimap rectangle background
sr.rect(0, 0, minimapCamera.viewportWidth, minimapCamera.viewportHeight);
sr.setColor(1f, 0f, 0f, 0.4f);
// player circle point
sr.circle(playerPos.x, playerPos.y, 20);
sr.end();

但是我如何计算玩家在整个平铺地图中的位置playerPos?以及如何只绘制缩放地图的一部分? (我不想画所有地图,但要画比我的主相机更大的部分)。

编辑: 如果我想在我的小地图中重复使用我的平铺地图,我怎样才能在小地图中只绘制玩家可见部分(目前,即使我指定了一个小的相机尺寸,所有地图也会被渲染)?

【问题讨论】:

    标签: libgdx tiled


    【解决方案1】:

    假设您的瓦片地图使用行和列,并且每个单元格都有设置的宽度和高度,您可以像这样获取玩家在瓦片地图数组中的位置(希望您不介意 JavaScript):

    var player={x:200,y:200};/* Or whatever position. */
    var tile_width=tile_height=32;/* Or whatever dimension you're using. */
    
    player.tile_x=Math.floor(player.x/tile_width);
    player.tile_y=Math.floor(player.y/tile_height);
    

    这将为您提供玩家在世界上占据的确切 x 和 y 板块。

    【讨论】:

    • 我认为您必须调整数学以考虑当前视口,因为他可能不会一次绘制/查看整个地图?
    猜你喜欢
    • 2017-12-31
    • 2014-10-23
    • 2016-01-24
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多