Godot对象以不同的速度移动



我是Godot的新手,一直在做一个小项目来帮助我学习。在这个项目中,我有一个轮子,当用户触摸屏幕时会转动,还有一个从屏幕中心向外的球。当我执行这个项目时,球有时会在一两秒钟内跑得异常快,轮子几乎会立即旋转。我认为这与游戏的帧速率有关,但当我将游戏发布到应用商店时,我如何确保这种情况不会发生?
(所有代码都在GDScript中(

移动球的代码(ball.gd(:

var movev = Vector2(0,0)
func _process(delta):
position += movev

转轮代码(wheel.gd(:

var goal = 0
func _process(delta):
if goal > rotation:
rotation += deg2rad(1)

单击屏幕时的代码(World.gd(:

onready var Wheel = get_node("Wheel/Center")
func _on_Button_button_down():
Wheel.goal += deg2rad(45)

这是我制作的一段视频,展示了我正在谈论的内容:视频链接

是什么导致了这种行为,我该如何稳定它?

参数delta告诉您经过的时间。你需要把你的速度乘以它。


例如:

var movev = Vector2(0,0)
func _process(delta):
position += movev

这里有一个速度movev和一个位置position。速度是增量时间上的增量位置。因此,位置和速度是不同的单位,不应该将它们相加。

如果你有delta时间上的delta位置,你需要乘以delta时间来得到delta位置。你可以把这个三角洲位置加到你的位置上。

另请参见:瞬时速度。


来自Godot文档:

delta参数包含自上次调用_process((以来以秒为单位的浮点数经过的时间

因此,您的代码应该是:

var movev = Vector2(0,0)
func _process(delta):
position += movev * delta

类似于角速度:

var goal = 0
func _process(delta):
if goal > rotation:
rotation += deg2rad(1) * delta

注意:经过此更改后,您可能会发现您的速度太慢或太快。记住单位。正如文档中所说,参数delta以秒为单位。因此,你应该用每秒角度来表达你的角速度,用每秒位移来表达你在位置的线速度<我还提醒你,速度的最大值就是速度,也就是时间的距离>

相关内容

  • 没有找到相关文章

最新更新