1

我用 Java 编写了一个原型,它采用了可移动角色和基于图块的图形和游戏逻辑。每个关卡的布局都存储在一个 10x10 的二维数组中。当我使用以下代码检测玩家是否与“1”(空)图块碰撞时,它仅在玩家与数组中的最后一个“1”图块碰撞时返回正值,这是为什么呢?我知道这种方法非常低效。

for(int r = 0; r < levArray.length; r++) {
        for(int c = 0; c < levArray[0].length; c++) {
            if(levArray[r][c] == 1) {
                if(px >= r*64-9 && px <= (r+1)*64+11 && py >= c*64-30 && py <= (c+1)*64+30) {
                    isColliding = true;
                } else {
                    isColliding = false;
                }
            }
        }   
    }
4

2 回答 2

3

当您发现碰撞时,您需要停止循环(例如使用中断)。现在你一直循环,isColliding 变量将被设置为数组中的最后一项。

于 2013-09-27T15:49:34.480 回答
0

您正在对照玩家位置检查关卡的每个元素(px,py)。由于这些循环中唯一的控制是迭代本身,所以最后一个比较发生在最后一个单元格。先前计算的任何结果都将被最后一次计算覆盖。

正如 Kayaman 所说,您可以中断或返回以退出循环;更好的是根据级别检查玩家位置,而不是根据玩家检查级别。您知道玩家在哪里,如果您将该px,py坐标转换为r,c坐标,您只需查看关卡数组中的一个元素。

于 2013-09-27T15:51:44.437 回答