我正在制作一款类似于马里奥的游戏,我已经得到了由数组和图像生成的 map 。但我的问题是我不知道如何为所有图 block 制作一个碰撞箱系统。我试过根据你在 map 上的位置建立一个基于位置的碰撞系统
像这样
if(xpos > 10*mapX && xpos < 14 * mapX){
ypos -= 1;
}
但我不想对每一堵墙或每一个洞都这样做。 那么有没有一种方法可以检查角色的前方、下方和上方,看看那里是否有一个碰撞箱,如果有,你不能移动那个方向或跌倒吗?
谢谢
最佳答案
如果是简单的 2D 游戏,我建议将 map 分成正方形。您可以将 map 作为二维数组存储在内存中,并在每一帧检查与玩家相邻的图 block 。当然,他在移动过程中最多可以占据 4 个方 block ,但这让您最多只能检查 12 个位置,这很容易做到。
可以使用图像位置和尺寸轻松地进行进一步的碰撞检查。
请记住,无需检查静态对象(环境)是否与某物发生碰撞,您只需要检查自上一帧以来移动过的对象,即玩家和 Sprite 。
编辑:
假设您有以下 map 部分(变量 map ):
...
.pe
ooo
在哪里
. = nothing
p = player
o = floor
e = enemy
您还有一对 (x, y)
表示玩家的 tile 索引(不是精确位置)。在这种情况下,您必须执行以下操作:
if ("o".equals(map[y + 1, x + 1]))
//floor is under
if ("e".equals(map[y, x + 1]))
//enemy is on the right
if ("o".equals(map[y - 1, x]))
//floor is above us
如果满足这些条件中的任何一个,您必须检查图像位置并处理碰撞。
关于java - 如何制作碰撞箱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18313601/