【问题标题】:Collision detection for side scroller 2d game, mario tile based横向滚轴 2d 游戏的碰撞检测,基于马里奥瓷砖
【发布时间】:2013-08-11 16:00:15
【问题描述】:

好吧,我正在制作一个 2d 横向卷轴。我正在做一个像马里奥这样的块系统。 我想知道作为球员有 4 条线是否可以:头、右侧、左侧、脚。 并有一个方法检查 rightside.intersects 是否阻止这是一个好方法吗? 用于碰撞检测。 我尝试通过矩形和矩形进行碰撞,但这是一个问题,因为如果玩家接触地面顶部,我必须检查地面,然​​后停止重力向下移动,但是当我去检查玩家是否撞到侧面的块时,玩家已经发送了一个信号说它击中了它,即使它没有,原因是它正在撞击地面。

有什么想法可以通过方块和玩家进行简单的碰撞吗?游戏中没有山丘或倾斜。顺便说一下,这是用 Java 编码的。

我也听说过点法,但它似乎不适合这个,因为我使用的是矩形。

【问题讨论】:

    标签: java collision slick2d 2d-games


    【解决方案1】:

    您可能希望使用 Rectangle 绑定玩家并使用另一个 Rectangle 作为图块,它们有一个 .intersects 方法可用于碰撞。

    【讨论】:

    • 我是,但问题是当我检查碰撞时,它会检查地面,然​​后我无法检查侧面,因为该值已经为真。
    【解决方案2】:

    正如 arynaq 所说,你可以有一个边界框,但让它分别检查水平和垂直碰撞,这样你就可以以不同的方式处理你的碰撞类型。或者您可以进行更具体的检查,因为 .headCollided 或 .feetCollided 只检查一侧是否发生碰撞。

    【讨论】:

      【解决方案3】:

      您可能要检查字符周围至少 8 个点,每个角一个点,边界矩形每个边缘的中间一个点。我将从玩家角色正下方的那个开始并对其进行测试,然后在您看到导致没有它们的行为后添加所有其他的,即。过早掉下边缘,穿过墙壁等。

      【讨论】:

        【解决方案4】:

        我建议您使用物理引擎来利用碰撞检测等,您可以使用 jBox2D,将其与 Slick2D 集成,jBox2D 将提供碰撞回调,您可以获得关于特定检测的更精细定义。

        您可以在此处获取 jBox2D(原始 Box2D C++ 物理模拟器的一个端口):

        http://www.jbox2d.org/

        您可以在此处了解有关 box2D 的更多信息:(本教程适用于 ActionScript,但它们非常相似,他 (Todd Kerpelman) 讨论了一些游戏架构问题,因此非常有用)。

        http://www.kerp.net/box2d/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-26
          • 1970-01-01
          • 1970-01-01
          • 2012-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多