【问题标题】:Some collision detection advice一些碰撞检测建议
【发布时间】:2013-12-06 00:35:06
【问题描述】:

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

我的新想法是使用围绕我的播放器对象的 9 个点,并检查其中哪些点在图块的范围内。每个角落一个点,每边一个点,中心一个点。每种瓷砖类型将使用一组不同的碰撞处理规则。

但是,每种瓷砖类型都必须使用一组复杂的条件语句来进行碰撞测试——也许过于复杂。有什么指导吗?

【问题讨论】:

    标签: java collision-detection game-engine tile


    【解决方案1】:

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

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

    对于每个图块,您只需 setCollisionStrategy(MyRuleHere)

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      这个例子展示了一些常见的策略,你可以链接来获得快速准确的碰撞检测

      1. 边界框(最快)
      2. 形状(多边形、圆形、贝塞尔曲线...)
      3. Alpha 通道(最慢、最准确)

      【讨论】:

        猜你喜欢
        • 2021-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-05
        • 2019-04-30
        相关资源
        最近更新 更多