如何从libGDX中的单元格使用浮动块获取tile的位置?

如何从libGDX中的单元格使用浮动块获取tile的位置?

问题描述:

我目前正在制作一款游戏。这是一款2D平铺游戏。我试图做到这一点,当你踩水时,你的球员的速度和大小的变化。如何从libGDX中的单元格使用浮动块获取tile的位置?

我这个跑第二的每一个60:

if(map.getTileTypeByCoordinate(0, player.sprite.getX()/4.0f, player.sprite.getY()/4.0f) == TileType.WATER){ 
    player.sprite.setScale(2, 1.75f); 
    player.speed = 3; 
} else { 
    player.sprite.setScale(2, 2); 
    player.speed = 5; 
} 

map.getTileTypeByCoordinate(int layer, float x, float y);方法如下:

public TileType getTileTypeByCoordinate(int layer, float col, float row) { 
    Cell cell = ((TiledMapTileLayer) tiledMap.getLayers().get(layer)).getCell((int)(col), (int)(row)); 

    if(cell != null){ 
     TiledMapTile tile = cell.getTile(); 

     if(tile != null){ 
      int id = tile.getId(); 
      return TileType.getTileTypeById(id); 
     } 
    } 

    return TileType.GRASS; 
} 

如果我不投山口和行整数,然后我得到显然是一个错误。

这是一个问题的原因是因为我使用Box2D来检查碰撞。我按照我的比例(10.0f)分割所有东西,以便物理模拟更准确,并且我可以使播放器更快地移动。

我想知道是否有办法从float位置而不是int位置获取tile。我必须停止使用Box2D进行碰撞检测吗?我对此很好,但是我对自己的碰撞检测编程不太合适,所以如果是这种情况,我该如何去做我自己的?

如果您使用比例尺来使用Box2D,那么您需要重新调整坐标。

如果你的精灵在像素100那么它的box2d坐标是10米。 Tiled想要以像素为单位的坐标,只需乘以您的比例。

player.sprite.getX() * scale

当然可能有一些铸造与规模。

希望这有助于和评论,如果你有任何进一步的问题!

+0

这似乎并没有工作,我忘了注意,这是在我的代码: 'tiledMapRenderer =新OrthogonalTiledMapRenderer(TiledMap类,4F/Main.scale);' – xBegin

+0

我改变了if语句这样的:如果' (map.getTileTypeByCoordinate(0,(player.sprite.getX()*(Main.scale)* 1.0f),player.sprite.getY()*(Main.scale)* 1.0f)== TileType.WATER){ ' – xBegin

+0

此外,这对于制作方块来说非常有用: 'if(!getTileTypeByCoordinate(layer,(int)(x *(16/Main.scale)),(int)(y *(16/Main.scale) ))。isCollidable()){ //为瓦片创建主体 } – xBegin