Java游戏中的边界,“专业人士”如何做到这一点?

时间:2012-12-29 08:28:56

标签: java boundary 2d-games

专业人士如何在2D游戏中做界限?我的方式是说我不希望精灵进入某个区域:

//Example
if ((playerPosX >= 825) && (playerPosX  <= 910)&& (playerPosY >= 170) && (playerPosY <= 255)) {
    //do nothing
}else{
    //move
}

但有些游戏有很多界限,所以我想知道,有没有更简单的方法。我不认为有人会在整个游戏中使用上述方法,只是为了阻止移动。

修改 我的问题主要是关于你可以四处走动的游戏,类似于口袋妖怪或最终幻想

2 个答案:

答案 0 :(得分:7)

这取决于游戏。

  • 在基于网格的游戏中,每当精灵移动时,您经常会对网格进行查找,以检查它是否已移入&#34;阻止&#34;区域。如果是,则检测碰撞和/或执行精灵的一些校正运动。这是简单而有效的,唯一的问题是它限制您在网格结构周围设计关卡/场景。
  • 在具有非常动态环境(例如大量移动小行星)的游戏中,您通常会有一个基于空间分区的碰撞检测系统(例如 quadtree ),用于检测任意对象之间的碰撞。每个对象通常都有一个边界框
  • 在由矢量定义的复杂但固定几何体的游戏中,您可以预先计算BSP树并使用它来快速检测与景物的碰撞。这种技术在3D FPS游戏中很常见,但它也适用于2D。

许多游戏实际上会使用上述的组合:例如例如,用于固定场景的BSP树,以及由物理子系统管理的动态对象的四叉树。

答案 1 :(得分:0)

我想到了两种可能性,

  • 1st描述了多边形的被遮挡区域,并在多边形测试中做了一个点来确定精灵是否可以移动到这个位置。

  • 第2个像在图像处理程序中创建某种掩码(图层),其中零位表示可以移动的位置和阻挡区域的位置。这可以扩展到指示的深度,另见z-buffer以部分隐藏精灵,

编辑:

if ( mask[ nextY ][ nextX ] == 0 ) {
   currX = nextX;
   currY = nextY;
}

假设所有变量都是int,而mask是2d int数组。