Godot小入机 2025-01-01 19:20 采纳率: 25%
浏览 24
已结题

Godot中的代码问题

img


请问这是怎么回事?跟着B站上的教程做的。但不知道为什么就出错了这里显示的是无效的名称

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2025-01-01 19:25
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    根据你的描述,错误信息表明在 player.gd 脚本中调用了 transition_state 函数,但该函数在 CharacterBody2D 类型的基类中不存在。这通常意味着 owner 对象不是预期的类型,或者 transition_state 方法没有正确实现。

    以下是可能的解决方案:

    解决方案

    1. 检查 owner 的类型

      • 确保 owner 对象是正确的类型(例如 Node2DKinematicBody2D)。
      • 如果 owner 应该是 CharacterBody2D 类型,确保它被正确地设置为该类型。
    2. 确保 transition_state 方法存在

      • 检查 CharacterBody2D 类是否定义了 transition_state 方法。
      • 如果没有定义,你需要在 CharacterBody2D 类中添加该方法。
    3. 修正脚本中的错误

      • 检查 player.gd 脚本中的语法错误,例如拼写错误或不正确的语法。

    具体步骤

    1. 确保 owner 是正确的类型

      extends Node
      
      class_name StateMachine
      
      var current_state int = -1
      
      func _ready():
          await owner.ready
          current_state = 0
      
      func _physics_process(delta: float):
          var next := owner.get_next_state(current_state) as int
          if current_state != next:
              current_state = next
      
    2. 确保 CharacterBody2D 类中有 transition_state 方法

      extends CharacterBody2D
      
      func transition_state(new_state: int):
          # 实现状态转换逻辑
          pass
      
      func get_next_state(current_state: int) -> int:
          # 返回下一个状态
          return current_state + 1
      
    3. 修正脚本中的错误

      • 确保 player.gd 脚本中的语法正确。
      • 确保 owner 对象已经被正确地赋值。

    修改后的代码示例

    player.gd

    extends Node
    
    class_name StateMachine
    
    var current_state int = -1
    
    func _ready():
        await owner.ready
        current_state = 0
    
    func _physics_process(delta: float):
        var next := owner.get_next_state(current_state) as int
        if current_state != next:
            current_state = next
    

    CharacterBody2D.gd

    extends CharacterBody2D
    
    func transition_state(new_state: int):
        # 实现状态转换逻辑
        pass
    
    func get_next_state(current_state: int) -> int:
        # 返回下一个状态
        return current_state + 1
    

    通过这些步骤,你应该能够解决 Invalid call. Nonexistent function 'transition_state' in base 'CharacterBody2D(player.gd)' 的错误。如果还有问题,请检查是否有其他地方的代码错误或配置问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月9日
  • 已采纳回答 1月1日
  • 创建了问题 1月1日