Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查对象是否在等轴测分幅/块的边界内_Java_Tile_Bounding Box_Isometric - Fatal编程技术网

Java 检查对象是否在等轴测分幅/块的边界内

Java 检查对象是否在等轴测分幅/块的边界内,java,tile,bounding-box,isometric,Java,Tile,Bounding Box,Isometric,如何检查对象是否在等轴测块的边界内?例如,我有一个玩家,我想检查它是否在这个等距块的边界内。 我使用OpenGL四边形绘制等距块的平铺 我的第一次尝试是检入一种方形图案: e = object; this = isometric chunk; if (e.getLocation().getX() < this.getLocation().getX()+World.CHUNK_WIDTH* World.TILE_WIDTH &&

如何检查对象是否在等轴测块的边界内?例如,我有一个玩家,我想检查它是否在这个等距块的边界内。 我使用OpenGL四边形绘制等距块的平铺

我的第一次尝试是检入一种方形图案:

e = object;
this = isometric chunk;

        if (e.getLocation().getX() < this.getLocation().getX()+World.CHUNK_WIDTH*
                World.TILE_WIDTH && e.getLocation().getX() > 
                this.getLocation().getX()) {
            if (e.getLocation().getY() > this.getLocation().getY() &&   
                    e.getLocation().getY() < this.getLocation().getY()+
                    World.CHUNK_HEIGHT*World.TILE_HEIGHT) {
                return true;
            }
        }
        return false;
这里发生的是,它检查块周围的一个正方形,所以不是真正的等距边界。图像示例:红色是程序检查边界的位置

我现在所拥有的:

所需支票:

最终,我希望对区块中的每个磁贴执行相同的操作

额外信息:


到目前为止,我在游戏中只能一块一块地移动,但现在我希望他们可以自由移动,但我仍然需要他们有一个地砖位置,所以无论他们在地砖上的什么位置,他们的地砖位置都将是特定的地砖。然后,当它们位于其他平铺的边界框内时,它们的平铺位置将成为新的平铺。块也是如此。球员确实有一个区域,但在这种情况下区域并不重要。只要X和Y在边界框内,它就应该返回true。它们不必完全在瓷砖上。

这是通过变换矩阵完成的。基本上,可以应用旋转和缩放将正方形变换为等距菱形形状;同样的原则也适用于相反的情况。使用两个“变换”,你可以把一颗钻石——你的视觉效果变成一个正方形/矩形——你的逻辑在这里是一个例子——在Java中并不难:在快速搜索Java+矩阵之后,我找到了仿射变换矩阵的Java标准实现,这就是我所说的矩阵。干得好: