如何从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
当然可能有一些铸造与规模。
希望这有助于和评论,如果你有任何进一步的问题!
这似乎并没有工作,我忘了注意,这是在我的代码: 'tiledMapRenderer =新OrthogonalTiledMapRenderer(TiledMap类,4F/Main.scale);' – xBegin
我改变了if语句这样的:如果' (map.getTileTypeByCoordinate(0,(player.sprite.getX()*(Main.scale)* 1.0f),player.sprite.getY()*(Main.scale)* 1.0f)== TileType.WATER){ ' – xBegin
此外,这对于制作方块来说非常有用: 'if(!getTileTypeByCoordinate(layer,(int)(x *(16/Main.scale)),(int)(y *(16/Main.scale) ))。isCollidable()){ //为瓦片创建主体 } – xBegin