Mobile 戈多物体以不同的速度移动

Mobile 戈多物体以不同的速度移动,mobile,game-physics,frame-rate,godot,gdscript,Mobile,Game Physics,Frame Rate,Godot,Gdscript,我是戈多的新手,一直在做一个小项目来帮助我学习。在这个项目中,我有一个轮子,当用户触摸屏幕时会转动,还有一个球从屏幕中心向外移动。当我运行项目时,球有时会异常地快一两秒钟,轮子几乎会立即旋转。我假设这与游戏的帧速率有关,但如何确保在将游戏发布到应用商店时不会发生这种情况? (所有代码都在GDScript中) 移动球的代码(ball.gd): 旋转轮代码(wheel.gd): 单击屏幕时的代码(World.gd): 下面是我制作的一段视频,展示了我所谈论的内容: 是什么导致了这种行为以及如何稳定它

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

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

旋转轮代码(wheel.gd):

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

下面是我制作的一段视频,展示了我所谈论的内容:


是什么导致了这种行为以及如何稳定它?

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


例如,考虑:

var movev = Vector2(0,0)
func _process(delta):
    position += movev
这里有一个速度
movev
,还有一个位置
position
。速度是增量时间上的增量位置。因此,位置和速度是不同的单位,不应添加它们

如果在增量时间内有增量位置,则需要乘以增量时间得到增量位置。你可以把三角洲的位置加到你的位置上

另请参见


发件人:

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
,以秒为单位。因此,你应该用每秒角度来表示角速度,用每秒位置位移来表示线速度。我还提醒你们,速度的大小是速度,也就是时间的距离

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