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