Godot 对象以不同的速度移动
Godot Objects are moving at varying speeds
我是 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)
这是我制作的一段视频,展示了我在说什么:Video Link
是什么导致了这种行为,我该如何稳定它?
参数delta
告诉你经过的时间。您需要将速度乘以它。
考虑,例如:
var movev = Vector2(0,0)
func _process(delta):
position += movev
这里有速度 movev
和位置 position
。速度是增量时间上的增量位置。所以位置和速度是不同的单位,不能相加
如果您在增量时间上有增量位置,则需要乘以增量时间以获得增量位置。您可以将那个增量位置添加到您的位置。
the delta parameter contains the time elapsed in seconds as a floating-point number since the previous call to _process()
因此,您的代码应该是:
var movev = Vector2(0,0)
func _process(delta):
position += movev * delta
与 angular 速度类似:
var goal = 0
func _process(delta):
if goal > rotation:
rotation += deg2rad(1) * delta
注意:您可能会发现经过此更改后您的速度太慢或太快。记住单位。正如文档所说,参数 delta
以秒为单位。因此,您应该用每秒角度 angular 速度和每秒 位置 位移表示线速度。 另外提醒一下,velocity速度的大小就是速度,也就是时间的距离
我是 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)
这是我制作的一段视频,展示了我在说什么:Video Link
是什么导致了这种行为,我该如何稳定它?
参数delta
告诉你经过的时间。您需要将速度乘以它。
考虑,例如:
var movev = Vector2(0,0)
func _process(delta):
position += movev
这里有速度 movev
和位置 position
。速度是增量时间上的增量位置。所以位置和速度是不同的单位,不能相加
如果您在增量时间上有增量位置,则需要乘以增量时间以获得增量位置。您可以将那个增量位置添加到您的位置。
the delta parameter contains the time elapsed in seconds as a floating-point number since the previous call to _process()
因此,您的代码应该是:
var movev = Vector2(0,0)
func _process(delta):
position += movev * delta
与 angular 速度类似:
var goal = 0
func _process(delta):
if goal > rotation:
rotation += deg2rad(1) * delta
注意:您可能会发现经过此更改后您的速度太慢或太快。记住单位。正如文档所说,参数 delta
以秒为单位。因此,您应该用每秒角度 angular 速度和每秒 位置 位移表示线速度。 另外提醒一下,velocity速度的大小就是速度,也就是时间的距离