如何限制 RigidBody2D 的旋转?
How to limit rotation on a RigidBody2D?
目前我正在制作 Flappy Bird 游戏的克隆以供练习。我将这只鸟表示为 RigidBody2D
.
extends RigidBody2D
func _ready():
pass
func _input(event):
if Input.is_action_just_pressed("input_action_flap"):
bird_flap()
func _physics_process(delta):
print(self.rotation_degrees)
self.rotation_degrees = -45
print(self.rotation_degrees)
func bird_flap():
var des_linear_velocity_x : float = get_linear_velocity().x
var des_linear_velocity_y : float = -750
var des_angular_velocity : float = -3
set_linear_velocity(Vector2(des_linear_velocity_x, des_linear_velocity_y))
set_angular_velocity(des_angular_velocity)
我正在尝试限制节点可能旋转的方法。但是,我 运行 遇到了一些问题。
-135.234329
-45
-137.498474
-45
-139.724884
-45
-141.914169
-45
-144.066986
-45
-146.183914
-45
-148.265564
-45
-150.312515
-45
-152.325363
-45
由于 Godot 的内置物理引擎,旋转的值似乎在疯狂闪烁。当我尝试使用方法 clamp(...)
- 随后我的角色精灵旋转时出现剧烈闪烁。
self.rotation = clamp(self.rotation, deg2rad(-45), deg2rad(+45))
有人知道如何解决这个问题吗?
直接改变物理状态 body 通常需要在 _integrate_forces
方法而不是 process
方法中完成。
(请参阅顶部注释:RigidBody2D documentation)
我在这里创建并设置一个新的转换。
func _integrate_forces(state):
var rotation_radians = deg2rad(rotation_degrees)
var new_rotation = clamp(rotation_radians, -0.78, 0.78)
var new_transform = Transform2D(new_rotation, position)
state.transform = new_transform
请记住,angular_velocity
仍在应用,这将导致您的 body“坚持”到 max/min 旋转。您可以通过在编辑器中调整 angular_damp
或在您达到目标 rotation_degrees
.
时手动更改代码中的 angular_velocity
来解决此问题
目前我正在制作 Flappy Bird 游戏的克隆以供练习。我将这只鸟表示为 RigidBody2D
.
extends RigidBody2D
func _ready():
pass
func _input(event):
if Input.is_action_just_pressed("input_action_flap"):
bird_flap()
func _physics_process(delta):
print(self.rotation_degrees)
self.rotation_degrees = -45
print(self.rotation_degrees)
func bird_flap():
var des_linear_velocity_x : float = get_linear_velocity().x
var des_linear_velocity_y : float = -750
var des_angular_velocity : float = -3
set_linear_velocity(Vector2(des_linear_velocity_x, des_linear_velocity_y))
set_angular_velocity(des_angular_velocity)
我正在尝试限制节点可能旋转的方法。但是,我 运行 遇到了一些问题。
-135.234329
-45
-137.498474
-45
-139.724884
-45
-141.914169
-45
-144.066986
-45
-146.183914
-45
-148.265564
-45
-150.312515
-45
-152.325363
-45
由于 Godot 的内置物理引擎,旋转的值似乎在疯狂闪烁。当我尝试使用方法 clamp(...)
- 随后我的角色精灵旋转时出现剧烈闪烁。
self.rotation = clamp(self.rotation, deg2rad(-45), deg2rad(+45))
有人知道如何解决这个问题吗?
直接改变物理状态 body 通常需要在 _integrate_forces
方法而不是 process
方法中完成。
(请参阅顶部注释:RigidBody2D documentation)
我在这里创建并设置一个新的转换。
func _integrate_forces(state):
var rotation_radians = deg2rad(rotation_degrees)
var new_rotation = clamp(rotation_radians, -0.78, 0.78)
var new_transform = Transform2D(new_rotation, position)
state.transform = new_transform
请记住,angular_velocity
仍在应用,这将导致您的 body“坚持”到 max/min 旋转。您可以通过在编辑器中调整 angular_damp
或在您达到目标 rotation_degrees
.
angular_velocity
来解决此问题