Java 一些碰撞检测建议

Java 一些碰撞检测建议,java,collision-detection,game-engine,tile,Java,Collision Detection,Game Engine,Tile,我正在开发一款基于平铺的平台游戏,该游戏目前使用边界框和重叠检查进行碰撞检测。我觉得这种方法缺乏灵活性。我希望根据瓷砖的类型有不同的碰撞响应 我的新想法是在我的玩家对象周围使用9个点,并检查其中哪些点在互动程序的边界内。每个角落、每边和中心各有一个点。每种磁贴类型都将使用一组不同的冲突处理规则 但是,每种磁贴类型都必须使用一组复杂的条件语句进行冲突测试——可能过于复杂。有什么指导吗?这听起来像是战略模式的案例: 定义一个“进程冲突”接口,然后定义该接口的多个实现,用于不同的冲突规则 对于每个磁贴

我正在开发一款基于平铺的平台游戏,该游戏目前使用边界框和重叠检查进行碰撞检测。我觉得这种方法缺乏灵活性。我希望根据瓷砖的类型有不同的碰撞响应

我的新想法是在我的玩家对象周围使用9个点,并检查其中哪些点在互动程序的边界内。每个角落、每边和中心各有一个点。每种磁贴类型都将使用一组不同的冲突处理规则


但是,每种磁贴类型都必须使用一组复杂的条件语句进行冲突测试——可能过于复杂。有什么指导吗?

这听起来像是战略模式的案例:

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

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

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

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

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

准确的碰撞检测通常会对性能产生巨大影响,因此简单地提高准确性对游戏来说是不行的

一种非常好的方法是为每个磁贴使用链式碰撞检测策略
粗略的策略(如边界框检查)可以非常快速地执行,并且可以排除肯定没有冲突的情况(无论如何,这是最常见的情况)

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

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

  • 边界框(最快)
  • 形状(多边形、圆、贝塞尔曲线等)
  • Alpha通道(最慢、最精确)