我正在使用基于平铺的平台游戏,该游戏目前使用边界框和重叠检查进行碰撞检测。我发现这种方法不灵活。我希望根据磁贴的类型有不同的碰撞响应。
我的新想法是使用围绕我的玩家对象的9个点,并检查这些点中的哪些点位于图块的边界内。每个角落的一个点,每个角落和一个在中心。每种磁贴类型都会使用一组不同的规则进行冲突处理。
然而,每种瓦片类型都必须使用一组复杂的条件语句进行冲突测试 - 可能过于复杂。有什么指导吗?
答案 0 :(得分:1)
这听起来像是战略模式的一个案例:http://en.wikipedia.org/wiki/Strategy_pattern
定义一个“进程冲突”的接口,然后为不同的冲突规则定义该接口的许多实现。
对于每个磁贴,您只需setCollisionStrategy(MyRuleHere)
。
要检查碰撞,您只需识别瓷砖
if (tile.getCollisionStrategy.collide(player)) {
// Collision
}
碰撞方法甚至可以返回不同类型碰撞的枚举 - 或者返回更复杂的对象 - 甚至可以处理碰撞本身并在玩家中进行更改。正确的方法取决于您的整体架构。
答案 1 :(得分:0)
准确的碰撞检测通常会对性能产生很大的影响,因此只是提高准确性不会为游戏做到这一点。
一种非常好的方法是为每个图块链碰撞检测策略。
诸如边界框检查之类的粗略策略可以非常快速地执行,并且已经可以排除肯定没有冲突的情况(这是最常见的情况)。
策略越精细,涉及的计算越多,但目标仍然是快速检测某些碰撞/无碰撞情况并避免计算时间。
此示例显示了一些常见的策略,您可以链来获得快速准确的碰撞检测: