java - 如何制作碰撞箱?

标签 java

我正在制作一款类似于马里奥的游戏,我已经得到了由数组和图像生成的 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/

相关文章:

java - 为什么ResourceBundleMessageSource 只允许使用messageSource 作为bean id?

java - 错误: cannot find symbol method setSupportImageTintList(ColorStateList)

java - 访问简单数组时出错

java - Docker:如何在 Debian jessie-slim 上安装 OpenJDK JRE 12?

java - 如何在 xpages 中从 Java 传递对文件的引用

java - 如果我们知道距离 x1, y1, y2 则计算 x2

java - Spring集成和改变数据路由

java - Android 通过UDP套接字发送对象

java - Android 对话框,删除对话框周围的灰色细边框(~2px)

java - 配置 Jackson 以使用 @XmlRootElement 的名称属性