Godot 3.0在运行时更改碰撞盒

时间:2018-06-06 17:13:14

标签: game-physics godot gdscript

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

(我还使用了一个单独的hitbox行走)

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个不同的命中箱。我没有找到任何更好的解决方案,但我觉得必须有一个。

所以有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:1)

最终,您的解决方案将是最简单的解决方案,就好像您修改了Hitbox的几何形状(可以通过假设使用矩形Hitbox来编辑class Model(nn.Module): def __init__(self, input_dim): super(Model, self).__init__() self.fc1 = nn.ReLU(input_dim, 64) self.fc2 = nn.ReLU(64,32) self.fc3 = nn.Relu(32, 8) self.fc4 = nn.Linear(8, 3) model = Model() criterion = nn.MSELoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.001) 来完成)一样,您仍然必须存储所有通过在代码中编写RectExtents而不是在编辑器中对其进行修改,可以修改12个几何。

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