Godot Engine 学习笔记 KinematicBody2D

KinematicBody2D

  • KinematicBody2D
    • 简要说明
    • 成员函数
    • 成员变量
    • 说明
    • 成员函数说明
    • 使用

KinematicBody2D

以下为我对于官方文档的翻译以及使用情况,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 )

成员变量

  • float collision/safe_margin - 这个物体与另一个物体有多接近,这个物体会认为它们是相撞的。

说明

运动体是指被用户控制的特殊类型的物体。它们完全不受物理学的影响(对于其他类型的物体,如字符或刚体,它们与静态物体相同)。然而,它们有两个主要用途:

模拟运动:当这些物体手动移动时,无论是从代码还是从 AnimationPlayer(过程模式设置为固定),物理学将自动计算它们的线性和角速度的估计。这使得它们对于移动平台或其他 AnimationPlayer 控制的对象(如门、打开的桥等)非常有用。

运动学特征:KinematicBody2D 还有一个API ,用于在进行碰撞测试时移动对象(move_and_collide 和 move_and_slide 方法)。这使得它们能真正实现与世界发生碰撞的特征,但不需要高级物理。

成员函数说明

  • Vector2 get_floor_velocity ( ) const

返回地面的速度。只在调用 move_and_slide 函数时进行更新。

  • KinematicCollision2D get_slide_collision ( int slide_idx )

返回一个 KinematicCollision2D 对象,它包含在上一次 move_and_slide 函数调用期间发生的碰撞的信息。 由于主体在对 move_and_slide 函数的一次调用中可能发生多次冲突,因此必须在0到 (get_slide_count - 1) 的范围内指定碰撞的索引。

  • int get_slide_count ( ) const

返回上一次调用 move_and_slide 函数时物体的碰撞和改变的方向的次数。

  • bool is_on_ceiling ( ) const

如果物体在天花板上,则返回 true 。 只在调用 move_and_slide 函数时进行更新。

  • bool is_on_floor ( ) const

如果物体在地面上,则返回 true 。 只在调用 move_and_slide 函数时进行更新。

  • bool is_on_wall ( ) const

如果物体在墙上,则返回 true 。 只在调用 move_and_slide 函数时进行更新。

  • KinematicCollision2D move_and_collide ( Vector2 rel_vec )

沿着向量 rel_vec 移动物体。物体碰撞时会停止。返回一个 KinematicCollision2D ,包含关于碰撞的信息。

  • 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 )

沿着向量移动身体。如果身体与另一个物体碰撞,它会沿着另一个物体滑动,而不是立即停止。如果另一个物体是 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 。

  • bool test_move ( Transform2D from, Vector2 rel_vec )

检查碰撞而不移动身体。将节点的位置、比例和旋转的值假设为参数传入的 Transform2D ,然后尝试沿着向量 rel_vec 移动主体。如果发生碰撞,则返回 true

使用

关于 函数 move_and_slide :

  • Ball.tscn

Godot Engine 学习笔记 KinematicBody2D_第1张图片

  • Ball.gd
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
  • 运行

你可能感兴趣的:(Godot,Engine)