• Godot Help
  • Change Sprite2D Texture Region at runtime

Hi everyone!

I have been setting up a system to chose a sprite from an atlas when a projectile is created to randomly vary the projectiles. The code for this is below.

The issue I'm having is that the sprite doesn't seem to be updating after setting the render region. Is there some call I need to make to let godot know it needs to update the texture? Currently, it's calculating the sprite_position correctly, but there are no visible changes.

Thanks!

@onready var _sprite = $Sprite2D
var rand = RandomNumberGenerator.new()
var sprites = 4
var sprite_size = Vector2(64, 64)
var sprite_start = Vector2(0, 0)
var sprite_position = Vector2()


func _ready():
    setup_sprite()

func setup_sprite():
    # set initial rotation
    _sprite.rotation = dir.angle()

    # Select random sprite from availabe
    var chosen_sprite = rand.randi_range(0, sprites-1)
    print(chosen_sprite)
    sprite_position = sprite_start
    sprite_position.x = sprite_start.x + sprite_size.x * chosen_sprite

    _sprite.region_rect.position = sprite_position
  • Make sure that sprite's region_enabled flag is set to true.

    It'd probably be somewhat easier to use animated sprite for this.

Make sure that sprite's region_enabled flag is set to true.

It'd probably be somewhat easier to use animated sprite for this.

    xyz

    Changing that setting got it working! I did however switch to using the anmiated sprite, that was a great suggestion, much easier to get set up and running. Thanks!