所以我正在研究一个java RPG,我被困在碰撞检测上。这是我到目前为止的地图
我试图得到它,这样他就不能在蓝色上行走,但可以在白色上行走。我进行移动的方式是通过对每个纹理 x 和 y 应用 x 偏移和 y 偏移来移动地图,并在按下 wasd 键时添加/删除它们。这给出了玩家正在移动的影响,即使它是地图。这是我尝试进行检测的代码。
int x_offset = InGame.current_level.xoffset;
int y_offset = InGame.current_level.yoffset;
Rectangle player = new Rectangle(Math.round((x + x_offset) / 256),Math.round((y + y_offset) / 256),256,256);
for(int x = 0;x!= InGame.current_level.width;x++){
for(int y = 0;y!= InGame.current_level.height;y++){
int tile = InGame.current_level.tiles[x+y* InGame.current_level.width];
Rectangle tileRect = new Rectangle(x + x_offset ,y + y_offset,256,256);
if(player.contains(tileRect)){
System.out.println("Standing on " + tile);
return;
}
}
}
但有时它说他没有站在任何瓷砖上,当它说他在瓷砖上时通常是错误的。每个 Tile 都是通过 (x * 256) + xoffset 渲染的,对于 y 也是如此。地图存储在 int[] 中,其中数组的每一部分都是一个数字,对应于一个 tile id