【问题标题】:Godot, GDScript - Play Animation on Right ClickGodot,GDScript - 右键单击​​播放动画
【发布时间】:2019-10-21 04:50:15
【问题描述】:

任何关于为什么此代码不起作用的见解?

当我右键单击时,游戏崩溃并给出错误:“无效调用。基础 'Array' 中不存在函数 'play'”。

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

【问题讨论】:

  • 忘了补充说我确实有一个等于 null 的 'anim_Play' 变量。
  • “不起作用”没有帮助;有很多方法不起作用:它播放错误的动画,它抛出一个异常,什么也没发生,它播放了一半的动画等等。用代码和实际行为定义你的意图。
  • 当我右键单击它时,它会导致游戏崩溃并给出错误:“无效调用。基础 'Array' 中不存在函数 'play'。
  • 我建议检查游戏运行时创建的节点结构,然后在代码中适当地遍历树找到“AnimationPlayer”。似乎你从get_tree().get_nodes_in_group("AnimationPlayer") 得到的不是实际的AnimationPlayer,因为它找不到play()

标签: godot gdscript


【解决方案1】:

我从您的代码中猜想您正在尝试获取对 AnimationPlayer 节点的引用,但它失败了,而您获得了一个数组。

这是因为您使用的是get_nodes_in_group(返回组中的节点数组),而不是返回节点的get_node

调用无效。基本“数组”中不存在函数“播放”

表示您正在尝试从不存在的 Array 对象调用 play 方法(在 AnimationPlayer 中找到)。

你会得到AnimationPlayer 喜欢

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

【讨论】:

  • 我仍然收到错误“找不到节点:AnimationPlayer”,甚至收到一个新错误:“尝试在空实例的基础‘空实例’中调用函数‘播放’。”
  • 你重命名了吗?您可以使用编辑器进行查找,例如var anim = $path/to/player
【解决方案2】:

回答您的问题

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 建议的那样。

此外,阅读或搜索一些基本的编程概念会有所帮助:特别是对象和数组。

最后,阅读 Godot 文档中的场景和节点页面:https://docs.godotengine.org/en/3.1/getting_started/step_by_step/scenes_and_nodes.html

Godot 文档的整个入门指南是学习 Godot 的宝贵资源。它将对您有很大帮助,而且阅读时间不会太长。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 2021-03-21
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多