0

在我在 Godot 的(第一个)项目中,一个简单的平台游戏,我想让角色滑动。当角色滑动时,他应该只有一格高,这样他就可以穿过更小的间隙。因为我不知道任何更好的解决方案,所以我像这样更改了 hitboxes:

(我也用一个单独的碰撞箱来行走)

enum Shape {
    NORMAL,
    WALK,
    SLIDE
}

func set_shape(name):

    $NormalCShape.disabled = true
    $WalkCShape.disabled = true
    $SlideCShape.disabled = true

    if name == Shape.NORMAL:
         $NormalCShape.disabled = false
    elif name == Shape.WALK: 

        $WalkCShape.disabled = false

    elif name == Shape.SLIDE:

        $SlideCShape.disabled = false

这不是一个很好的解决方案。最近,我的代码变得更加复杂,因为我添加了不同的重力方向,这将导致 12 个不同的碰撞箱。我还没有找到更好的解决方案来做到这一点,但我觉得必须有一个。

那么有人可以帮我解决这个问题吗?

4

1 回答 1

1

最终,您的解决方案将是最简单的解决方案,就好像您修改了碰撞箱的几何形状(可以通过编辑CollisionShape2D.shape.rect_extents假设您使用的是矩形碰撞箱来完成),您仍然必须通过将其 RectExtents 写入来存储所有 12 个修改过的几何形状代码而不是在编辑器中修改它们。

一个更简单的潜在解决方案:假设您的角色使用 KinematicBody2D,只需更改您的代码,以便重力在向下的任何方向向他们施加力,然后旋转整个角色。这样你只需要 3 种不同的 CollisionShapes。

于 2019-07-29T19:12:13.570 回答