一些碰撞检测建议

时间:2013-12-05 15:59:20

标签: java collision-detection game-engine tile

我正在使用基于平铺的平台游戏,该游戏目前使用边界框和重叠检查进行碰撞检测。我发现这种方法不灵活。我希望根据磁贴的类型有不同的碰撞响应。

我的新想法是使用围绕我的玩家对象的9个点,并检查这些点中的哪些点位于图块的边界内。每个角落的一个点,每个角落和一个在中心。每种磁贴类型都会使用一组不同的规则进行冲突处理。

然而,每种瓦片类型都必须使用一组复杂的条件语句进行冲突测试 - 可能过于复杂。有什么指导吗?

2 个答案:

答案 0 :(得分:1)

这听起来像是战略模式的一个案例:http://en.wikipedia.org/wiki/Strategy_pattern

定义一个“进程冲突”的接口,然后为不同的冲突规则定义该接口的许多实现。

对于每个磁贴,您只需setCollisionStrategy(MyRuleHere)

要检查碰撞,您只需识别瓷砖

if (tile.getCollisionStrategy.collide(player)) {
  // Collision
}

碰撞方法甚至可以返回不同类型碰撞的枚举 - 或者返回更复杂的对象 - 甚至可以处理碰撞本身并在玩家中进行更改。正确的方法取决于您的整体架构。

答案 1 :(得分:0)

准确的碰撞检测通常会对性能产生很大的影响,因此只是提高准确性不会为游戏做到这一点。

一种非常好的方法是为每个图块链碰撞检测策略
诸如边界框检查之类的粗略策略可以非常快速地执行,并且已经可以排除肯定没有冲突的情况(这是最常见的情况)。

策略越精细,涉及的计算越多,但目标仍然是快速检测某些碰撞/无碰撞情况并避免计算时间。

enter image description here

此示例显示了一些常见的策略,您可以来获得快速准确的碰撞检测

  1. 包装盒(最快)
  2. 形状(多边形,圆形,贝塞尔曲线,......)
  3. Alpha通道(最慢,最准确)