【问题标题】:Godot C# "Error calling method from signal"Godot C#“来自信号的错误调用方法”
【发布时间】:2021-10-28 08:22:43
【问题描述】:

鉴于我的场景树:

Main_control(类型:控制)(父)

  • mnk_game(类型:控制)(儿童)

我可以使用来自Main_control 的信号在mnk_game 的脚本中运行方法,但反过来就不行(使用来自mnk_game 的信号调用Main_control 中的方法)

错误:

emit_signal:从信号“mnk_game_finished”调用方法时出错:“Control(Main_control.cs)::mnk_show_game”:找不到方法..

家长代码:

public class Main_control : Control
{
  public override void _Ready()
  {pass}
  public void mnk_show_game()
  {
    GD.Print("mnk_show_game reached"); //What I want to reach
  }
}

子代码:

public class mnk_game : Control
{
  [Signal]
  public delegate void mnk_game_finished();
  private Godot.Control game_controller;

  public override void _Ready()
  {
    game_controller = (Control)GetParent<Godot.Control>();
    this.Connect("mnk_game_finished", game_controller, "mnk_show_game");
  }
  public void any_method()
  {
    this.EmitSignal("mnk_game_finished");
  }
}

当我在子脚本中调用any_method 方法时,我希望能够在父脚本中访问mnk_show_game 方法。我可以这样做吗?如果有,怎么做?

【问题讨论】:

    标签: c# signals godot


    【解决方案1】:

    我没有太多在 C# 中使用 Godot 的经验,但我可以看到 mnk_game_finished 的定义没有参数,mnk_show_game 也没有参数。但是,您使用参数this.EmitSignal("mnk_game_finished", ds.board) 发出信号。尝试在没有参数的情况下发出信号:this.EmitSignal("mnk_game_finished") 或使用参数定义您的委托和函数。

    【讨论】:

    • 感谢您的回答!我错误地在帖子中保留了该变量。为了让我的代码运行,我从函数中删除了所有参数,但仍然无法正常工作。我刚刚根据您的反馈编辑了我的问题:)
    猜你喜欢
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2017-12-17
    • 1970-01-01
    相关资源
    最近更新 更多