使用 KinematicBody2D 作为 RigidBody2D

Use KinematicBody2D as RigidBody2D

你好,我是 Godot 的新手(我是法国人,这就是为什么我的英语不完美)

我正在尝试创建一个游戏(自上而下),其原理与相扑战斗相同,在圆圈外干掉你的对手。我遇到的问题是,如果我使用 KinematicBody2D,角色不会互相推动,这是游戏的基础,然后我看到 RigidBody2D 是可能的,但我在互联网上找不到任何方法来制作它像这样移动:https://docs.godotengine.org/fr/stable/tutorials/2d/2d_movement.html#rotation-movement。然后我搜索了是否可以用另一个 KinematicBody2D 推动一个 KinematicBody2D(以便它可以被推动),但我也找不到任何方法。

所以我被困在这里了,我的问题是这是否可能,尤其是我该怎么做?

感谢阅读, 诺弗莱尔

我认为这里的问题是您没有使用碰撞。函数 move_and_slidemove_and_collide 会使一个 Kinematic Body 移动,并撞击其他物体(包括 Kinematic Body)。

但是,一旦您使用这两个函数中的任何一个,您就会意识到它们并没有按照您在问题中需要的方式相互推动。

来自文档 (en, fr)

  • move_and_collide:移动的物体会移动,如果有碰撞器(任何障碍物),它会在碰撞后立即停止并且return一个KinematicCollision2D物体。
  • move_and_slide:相比move_and_collide采取更进一步的动作,移动的物体会滑过对撞机,把它当作墙或地板。对平台游戏很有用。

在您的用例中,您别无选择,只能自己控制碰撞。您可以在此处获取有关 KinematicCollision2D 的更多信息:(en, fr)。这可能是你的做法:

var collision = player.move_and_collide(direction_vector)
if (!collision):
  # No collision occurred
  return
else: 
  # Collided with a wall or player
  if (collision.collider == wall) 
    # if you keep track of wall object as a variable to identify it
    # you can have the sumo just stop moving and not process anymore
    return
  else:
    var opponent = collision.collider
    # write game logic to move opponent and yourself
    return