我有TiledMap map
一些对象图层,例如"墙","门","秒杀" ...
每层在其特定位置只有矩形。
我可以检查切片图层的特定单元格是否包含特定对象图层中的对象的最佳方法是什么?
要做一些事情,比如在(x,y)处的切片图层的单元格包含来自对象图层的对象"墙",说"无法移动到那里"
我刚刚开始使用libGDX和Tiles,当前我能想到的检测这样的东西的方法是创建所有这些矩形并检查每次玩家移动到下一个单元格时它们是否与玩家矩形重叠
但是那会检查每一个对象,我只需要检查玩家当前所在的一个单元格。
答案 0 :(得分:1)
一种可以减少计算的方法(这只适用于墙/门/等都是静态的并且不移动或改变形状)是通过保持一个二维数组的布尔(基本上是你的TiledMap){ {1}}表示磁贴被阻止,反之亦然。
在伪代码中:
true
现在要测试位置// Initially all grid cells are un-blocked
boolean[][] gridBlockedByWall = new boolean[MAP_HEIGHT][MAP_WIDTH]; //Replace with your grid size
// Loop over each wall and set array (change depending on your implementation)
for (Rectangle wall: walls) {
// Here we run over every wall and column covered by this rectangle and set it as blocked
for (int row = wall.y; row < wall.y + wall.height; row++) {
for (int col = wall.x; col < wall.x + wall.width; col++) {
gridBlockedByWall[row][col] = true;
}
}
}
是否被墙阻挡,只需执行(x, y)
,它将在固定时间内运行。