Godot, GDScript - Воспроизведение анимации по правому клику - PullRequest
0 голосов
/ 21 октября 2019

Любое понимание того, почему этот код не работает?

Когда я щелкаю правой кнопкой мыши, игра вылетает и выдает ошибку: «Неверный вызов. Несуществующая функция« play »в базе данных« Array »».

   func _ready():
       anim_Play = get_tree().get_nodes_in_group("AnimationPlayer")
   func_input(event):
      if Input.is_action_pressed("aim"):
        anim_Play.play("AimSights")

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Ответ на ваш вопрос

get_nodes_in_group(group) возвращает Array узлов, которые находятся как в SceneTree, так и в группе group.

Допустим, есть один AnimationPlayerузел в группе "AnimationPlayer". Мы получим это как:

var anim_player = get_tree().get_nodes_in_group("AnimationPlayer")[0]

Обратите внимание на [0]. Это называется аксессором. Мы получаем доступ к массиву в элементе 0. Теперь мы можем вызвать play:

anim_player.play("AimSights")

Обратите внимание: доступ к несуществующему элементу массива является ошибкой.

Рекомендация

Это похоже наненадлежащее использование групп. Я рекомендую вам использовать путь к узлу, как предложил svarog, если проигрыватель анимации находится в той же сцене, что и сценарий.

Кроме того, это поможет вам прочитать или изучить некоторые основные концепции программирования: в частности, объекты и массивы. .

Наконец, прочитайте страницу сцен и узлов из документации Годо: https://docs.godotengine.org/en/3.1/getting_started/step_by_step/scenes_and_nodes.html

Полное руководство по началу работы с документацией Годо является бесценным источником для изучения Годо. Это очень поможет вам и не слишком долго для чтения.

Удачи!

0 голосов
/ 22 октября 2019

Я думаю, из вашего кода, что вы пытаетесь получить ссылку на ваш AnimationPlayer узел, он терпит неудачу, и вместо этого вы получаете массив.

Это происходит потому, что вы используете get_nodes_in_group (который возвращает массив узлов в группе) вместо get_node, который возвращает узел.

Неверный звонок. Несуществующая функция play в базе данных Array

Означает, что вы пытаетесь вызвать метод play (найденный в AnimationPlayer) из объекта Array, который не существует.

Вы получите AnimationPlayer как

var anim_Play = get_node("./path/to/your/AnimationPlayer")
...