Quadro contra delta

A mesma constante de velocidade aplicada com e sem delta, com a distância percorrida em cada linha. A segunda só é rápida na medida da taxa de quadros.

O editor acima está rodando este projeto. Mude uma linha e ele recarrega.

Classes do Godot usadas

Polygon2DLabelEngine

O código

scripts/main.gd
extends Node

const SPEED: float = 300.0
const MARGIN: float = 70.0
const SIZE: Vector2 = Vector2(46, 46)

var timed: Polygon2D
var untimed: Polygon2D
var timed_label: Label
var untimed_label: Label
var fps_label: Label
var timed_distance: float = 0.0
var untimed_distance: float = 0.0
var track_start: float = 0.0
var track_end: float = 0.0


func _ready() -> void:
	_add_background()

	var view: Vector2 = get_viewport().get_visible_rect().size
	track_start = MARGIN
	track_end = view.x - MARGIN

	timed = _add_track(view.y * 0.36, Color('#8eef97'))
	untimed = _add_track(view.y * 0.68, Color('#fc7f7f'))

	timed_label = _add_label('position.x += speed * delta', Vector2(MARGIN, view.y * 0.36 - 70), Color('#8eef97'))
	untimed_label = _add_label('position.x += speed', Vector2(MARGIN, view.y * 0.68 - 70), Color('#fc7f7f'))
	fps_label = _add_label('', Vector2(MARGIN, 40), Color('#999999'))


func _process(delta: float) -> void:
	var timed_step: float = SPEED * delta
	var untimed_step: float = SPEED

	timed.position.x = _advance(timed.position.x, timed_step)
	untimed.position.x = _advance(untimed.position.x, untimed_step)
	timed_distance += timed_step
	untimed_distance += untimed_step

	timed_label.text = 'position.x += speed * delta   travelled %d px' % timed_distance
	untimed_label.text = 'position.x += speed   travelled %d px' % untimed_distance
	fps_label.text = 'same speed constant, one frame rate: %d fps' % Engine.get_frames_per_second()


func _advance(from: float, step: float) -> float:
	return wrapf(from + step, track_start, track_end)


func _add_track(row: float, color: Color) -> Polygon2D:
	var rail: Line2D = Line2D.new()
	rail.width = 2.0
	rail.default_color = Color('#2a2f3d')
	rail.points = PackedVector2Array([Vector2(track_start, row), Vector2(track_end, row)])
	add_child(rail)

	var marker: Polygon2D = _make_rect(SIZE, color)
	marker.position = Vector2(track_start, row)
	add_child(marker)

	return marker


func _add_label(text: String, at: Vector2, color: Color) -> Label:
	var label: Label = Label.new()
	label.text = text
	label.position = at
	label.add_theme_color_override('font_color', color)
	label.add_theme_font_size_override('font_size', 20)
	add_child(label)

	return label


func _make_rect(size: Vector2, color: Color) -> Polygon2D:
	var rect: Polygon2D = Polygon2D.new()
	rect.polygon = PackedVector2Array([-size * 0.5, Vector2(size.x, -size.y) * 0.5, size * 0.5, Vector2(-size.x, size.y) * 0.5])
	rect.color = color

	return rect


func _add_background() -> void:
	var background: ColorRect = ColorRect.new()
	background.color = Color('#12141a')
	add_child(background)
	background.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)

Mais exemplos de Movimento