基于图块的游戏中的碰撞检测仅适用于阵列中的文件图块

时间:2013-09-27 15:43:27

标签: java arrays nested-loops

我在java中编写了一个原型,它采用了可移动的角色和基于图块的图形和游戏逻辑。每个级别的布局存储在10x10 2D阵列中。当我使用下面的代码来检测玩家是否与'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;
                }
            }
        }   
    }

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

正如卡亚曼所说,你可以打破或返回退出循环;更好的方法是检查玩家的位置,而不是检查玩家的等级。您知道播放器的位置,如果将px,py坐标转换为r,c坐标,则只需要查看关卡数组中的一个元素。