Partículas

Um emissor que segue o mouse, com uma textura de ponto procedural e uma rampa de cor. Partículas de CPU, que são as que o renderizador web desenha.

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

Classes do Godot usadas

CPUParticles2DGradientTexture2DGradient

O código

scripts/main.gd
extends Node

var particles: CPUParticles2D


func _ready() -> void:
	_add_background()

	particles = CPUParticles2D.new()
	particles.amount = 400
	particles.lifetime = 1.6
	particles.texture = _make_dot()
	particles.direction = Vector2(0, -1)
	particles.spread = 30.0
	particles.initial_velocity_min = 180.0
	particles.initial_velocity_max = 340.0
	particles.gravity = Vector2(0, 320)
	particles.scale_amount_min = 0.4
	particles.scale_amount_max = 1.2
	particles.color_ramp = _make_ramp()
	particles.position = get_viewport().get_visible_rect().size * 0.5
	add_child(particles)

	print('move the mouse over the game to drag the emitter')


func _process(_delta: float) -> void:
	var mouse: Vector2 = get_viewport().get_mouse_position()

	if get_viewport().get_visible_rect().has_point(mouse):
		particles.position = mouse


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


func _make_dot() -> GradientTexture2D:
	var gradient: Gradient = Gradient.new()
	gradient.set_color(0, Color(1, 1, 1, 1))
	gradient.set_color(1, Color(1, 1, 1, 0))

	var dot: GradientTexture2D = GradientTexture2D.new()
	dot.gradient = gradient
	dot.fill = GradientTexture2D.FILL_RADIAL
	dot.fill_from = Vector2(0.5, 0.5)
	dot.fill_to = Vector2(1.0, 0.5)
	dot.width = 32
	dot.height = 32

	return dot


func _make_ramp() -> Gradient:
	var ramp: Gradient = Gradient.new()
	ramp.set_color(0, Color('#8da5f3'))
	ramp.set_color(1, Color(0.98, 0.5, 0.5, 0))

	return ramp

Mais exemplos de Partículas