Случайный выбор анимации в анимированном спрайте

Во-первых, необходимо убедиться, что AnimatedSprite2D — правильный узел для использования. Я делаю одну из тех случайных игр-кликеров, в которых вы нажимаете кнопку и получаете случайный шанс получить разные предметы. Мне нужно, чтобы некоторые предметы были более редкими, чем другие, и чтобы спрайт показывал предмет, который вы получаете, а также имел возможность отправлять такую ​​​​информацию, как редкость этого предмета, имя и т. д.

Прямо сейчас я думал о том, чтобы разместить несколько однокадровых анимаций на одном анимированном спрайте, а затем использовать имя анимации для поиска метаданных.

Если AnimatedSprite2D подойдет, как будет выглядеть сценарий?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не уверен, какой узел лучше подойдет для вашего случая, поэтому пишу решение как для AnimatedSprite2D, так и для AnimationPlayer на случай, если ваши предпочтения изменятся в будущем.

АнимированныйСпрайт2D

@onready var animated_sprite_2d:AnimatedSprite2D = $AnimatedSprite2D

func play_random_animation():
    var animation_names := animated_sprite_2d.sprite_frames.get_animation_names()
    
    if (!len(animation_names)):
        return
    
    var random_ani_name = animation_names[randi() % animation_names.size()]
    animated_sprite_2d.play(random_ani_name)

Анимационный плеер

@onready var animation_player:AnimationPlayer = $AnimationPlayer

func play_random_animation():
    var animation_names := animation_player.get_animation_list()
    
    if (!len(animation_names)):
        return
    
    var random_ani_name = animation_names[randi() % animation_names.size()]
    animation_player.play(random_ani_name)

Примечание. Также вы можете поискать randomize() для истинной случайности.

Вот соответствующие ссылки на документацию для используемых классов:

  1. AnimatedSprite2D
  2. SpriteFrames
  3. AnimationPlayer
  4. AnimationMixer

Есть идеи, как сделать определенные анимации более вероятными, чем другие?

Owen Uhl 23.05.2024 20:26

@OwenUhl попробуйте применить это самостоятельно, и если это не сработает, добавьте к вопросу все, что вы пробовали, и я буду более чем рад вам помочь.

M. R. M. 24.05.2024 05:52

Другие вопросы по теме