Java TILEGAME,如何检查近环绕块的碰撞?

Java TILEGAME,如何检查近环绕块的碰撞?,java,2d,collision,tile,Java,2d,Collision,Tile,我正在尝试用Java开发一个平铺2D游戏。地图是一个网格,其中所有分幅的大小为48x48(玩家也是如此) 我不想在地图上的所有瓷砖上循环,以检查玩家是否在碰撞。我试图让玩家只检查最近的方块,根据方块上的“实心”布尔标志,他做的每一个动作 我面临的问题是:球员可以自由移动。他可能在两个街区之间 如何根据区块大小、玩家位置和周围索引实现此方法 这是我能得到的最接近的结果: public void checkCollisionWhenMoving() { for (int i = (playe

我正在尝试用Java开发一个平铺2D游戏。地图是一个网格,其中所有分幅的大小为48x48(玩家也是如此)

我不想在地图上的所有瓷砖上循环,以检查玩家是否在碰撞。我试图让玩家只检查最近的方块,根据方块上的“实心”布尔标志,他做的每一个动作

我面临的问题是:球员可以自由移动。他可能在两个街区之间

如何根据区块大小、玩家位置和周围索引实现此方法

这是我能得到的最接近的结果:

public void checkCollisionWhenMoving() {
   for (int i = (player.y / 48) - 2; i <= 4; i++) {
        for (int j = (player.y / 48)  - 2; j <= 4; ++j) {
            if (blocksMap[i][j].isBlocked()) {
                collisionDetector.checkCollision(player.getCollisionBox(),
                        blocksMap[i][j].getCollisionBox());
            }
        }
    }
}
移动时公共无效检查冲突(){
对于(int i=(player.y/48)-2;我的一个想法是检查下一个移动是否有效。假设他移动到位置67/5。计算瓷砖:1/0。如果1/0是地砖,让他移动。如果不是,不要(或让他移动到尽可能远的边界)。其他方法:检查每个帧中的播放器位置是否在有效的磁贴上。计算方法相同。如果不是,请将其设置为最后一个有效位置。@Eskalior感谢您的回答!我没有得到您的第一个方法…关于第二个方法,我如何检查播放器是否在有效的磁贴上,记住播放器正在逐像素移动,并且每个棋盘的e坐标(x,y)从48和48跳跃,以此类推。他可以在棋盘之间。你的方法在游荡游戏中效果非常好,玩家从一个棋盘移动到另一个棋盘。假设他在位置x:90,y:52。要得到他所在的棋盘,只需计算:90/48,52/48并将其落地(四舍五入)。您将获得磁贴1/1。然后检查blocksMap[1][1]。isBlocked(),如果为true,则玩家位于无效磁贴上。第一种方法中的计算相同。只需将玩家的位置替换为所需位置。我现在就知道了。我刚意识到,如果玩家位于(0,0),我最初考虑的“包围区域”将不起作用,他的顶部和左侧将没有瓷砖。我将尝试解决问题。谢谢!