#mobile #game-physics #frame-rate #godot #gdscript
#Мобильный #игра-физика #частота кадров #годо #gdscript
Вопрос:
Я новичок в Godot и работаю над небольшим проектом, который поможет мне учиться. В этом проекте у меня есть колесо, которое вращается, когда пользователь касается экрана, и шар, который выходит из центра экрана наружу. Когда я запускаю проект, шарик иногда на секунду или две движется необычно быстрее, и колесо вращается почти мгновенно. Я предполагаю, что это как-то связано с частотой кадров в игре, но как мне убедиться, что этого не произойдет, когда я опубликую свою игру в App Store?
(Весь код находится в 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)
Вот видео, которое я сделал, показывая, о чем я говорю: Ссылка на видео
Что вызывает такое поведение и как мне его стабилизировать?
Ответ №1:
Параметр 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
, как указано в документации, указывается в секундах. Таким образом, вы должны выразить свои угловые скорости в углах в секунду, а линейную скорость в положение перемещение в секунду. Я также напоминаю вам, что величина скорости скорости — это скорость, которая равна расстоянию во времени.