以下为我对于官方文档的翻译以及使用情况,3.0版本的文档
KinematicBody2D官方文档
继承: PhysicsBody2D < CollisionObject2D < Node2D < CanvasItem < Node < Object
类型: Core
运动物体的二维节点。
返回类型 | 函数 |
---|---|
Vector2 | get_floor_velocity ( ) const |
KinematicCollision2D | get_slide_collision ( int slide_idx ) |
int | get_slide_count ( ) const |
bool | is_on_ceiling ( ) const |
bool | is_on_floor ( ) const |
bool | is_on_wall ( ) const |
KinematicCollision2D | move_and_collide ( Vector2 rel_vec ) |
Vector2 | move_and_slide ( Vector2 linear_velocity, Vector2 floor_normal=Vector2( 0, 0 ), float slope_stop_min_velocity=5, int max_bounces=4, float floor_max_angle=0.785398 ) |
bool | test_move ( Transform2D from, Vector2 rel_vec ) |
运动体是指被用户控制的特殊类型的物体。它们完全不受物理学的影响(对于其他类型的物体,如字符或刚体,它们与静态物体相同)。然而,它们有两个主要用途:
模拟运动:当这些物体手动移动时,无论是从代码还是从 AnimationPlayer(过程模式设置为固定),物理学将自动计算它们的线性和角速度的估计。这使得它们对于移动平台或其他 AnimationPlayer 控制的对象(如门、打开的桥等)非常有用。
运动学特征:KinematicBody2D 还有一个API ,用于在进行碰撞测试时移动对象(move_and_collide 和 move_and_slide 方法)。这使得它们能真正实现与世界发生碰撞的特征,但不需要高级物理。
返回地面的速度。只在调用 move_and_slide 函数时进行更新。
返回一个 KinematicCollision2D 对象,它包含在上一次 move_and_slide 函数调用期间发生的碰撞的信息。 由于主体在对 move_and_slide 函数的一次调用中可能发生多次冲突,因此必须在0到 (get_slide_count - 1) 的范围内指定碰撞的索引。
返回上一次调用 move_and_slide 函数时物体的碰撞和改变的方向的次数。
如果物体在天花板上,则返回 true
。 只在调用 move_and_slide 函数时进行更新。
如果物体在地面上,则返回 true
。 只在调用 move_and_slide 函数时进行更新。
如果物体在墙上,则返回 true
。 只在调用 move_and_slide 函数时进行更新。
沿着向量 rel_vec
移动物体。物体碰撞时会停止。返回一个 KinematicCollision2D ,包含关于碰撞的信息。
沿着向量移动身体。如果身体与另一个物体碰撞,它会沿着另一个物体滑动,而不是立即停止。如果另一个物体是 KinematicBody2D
或 RigidBody2D ,它也会受到另一物体的运动的影响。你可以使用它来移动或旋转平台,或者让节点推其他节点。
linear_velocity
是每秒像素的值。例如 move_and_collide
不同的是,您不用将它乘以 delta
——这是通过该方法完成的。
floor_normal
是垂直方向,用来确定什么是墙,什么是地板或天花板。如果设置为默认值 Vector2(0, 0)
,则所有的东西都被认为是墙。这对自下而上的游戏很有用。
如果物体立在在斜坡上,水平速度(相对于地板速度)低于 slope_stop_min_velocity
,物体将完全停止。当你在 linear_velocity
中包含重力时,这会阻止物体滑下斜坡。当设置为较低的值时,物体将不能在陡峭的斜坡上静止。
如果身体发生碰撞,它会在它停止之前因 max_bounces
最大限度地改变方向。
floor_max_angle
是最大角度(弧度),它被用来分辨是地板(或天花板),还是墙。默认值等于45度。
返回物体停止时的运动。要获得关于发生碰撞的更详细信息,请使用 get_slide_collision 。
检查碰撞而不移动身体。将节点的位置、比例和旋转的值假设为参数传入的 Transform2D ,然后尝试沿着向量 rel_vec
移动主体。如果发生碰撞,则返回 true
。
关于 函数 move_and_slide :
extends KinematicBody2D
var moveLeft = Vector2(-200,0)
var moveRight = Vector2(200,0)
var moveUp = Vector2(0, -200)
var moveDown = Vector2(0, 200)
func _ready():
pass
func _process(delta):
if Input.is_action_pressed("ui_left"):
move_and_slide(moveLeft)
if Input.is_action_pressed("ui_right"):
move_and_slide(moveRight)
if Input.is_action_pressed("ui_up"):
move_and_slide(moveUp)
if Input.is_action_pressed("ui_down"):
move_and_slide(moveDown)
pass