godot2D游戏教程系列二(16)

前言:

完成目标:

成功编写状态机核心脚本,实现:

  • 初始化所有状态
  • 设置默认状态为 Idle
  • 每帧自动更新当前状态

一、创建状态机脚本

  • 新建 StateMachine.gd
  • 继承 Node
  • 定义变量 currentState 用来存储当前状态

作用:

状态机负责"记录现在处于什么状态"。


二、在 _ready() 中初始化所有状态

  • 遍历所有子节点(Idle、Run 等)
  • 确保它们是 State 类型
  • 告诉每个状态:"你的父节点是我"
  • 调用它们自己的初始化方法

作用:

让所有状态提前准备好。


三、设置默认状态

  • 默认选择第一个子节点(Idle)
  • 调用 Enter() 方法

效果:

游戏一开始角色自动进入待机状态,并播放待机动画。


四、每帧更新当前状态

  • ​_physics_process(delta)​ → 调用当前状态的物理更新(移动、重力)
  • ​_process(delta)​ → 调用当前状态的逻辑更新(输入、切换状态)

作用:

状态机只负责"转发",

真正的逻辑写在各个状态里面。


最终效果

现在:

  • 游戏启动 → 自动进入 Idle
  • 每帧自动调用当前状态逻辑
  • 状态机负责管理
  • 各状态各司其职

玩家状态系统正式开始运作。

实现过程:

  • 编写状态机脚本,在ready函数中初始化所有的状态脚本,将待机状态设置为初始进入游戏的默认状态。
  • 状态机的概念
  • 想象你在玩一个 RPG 游戏:
  • 状态机是"大脑",决定角色现在该做什么(站立、跑步、攻击)。
  • 状态是具体的行为:
  • IdleState:播放站立动画,检测"按方向键→跑步"。
  • RunState:播放跑步动画,检测"松开方向键→站立"。
  • 初始化:游戏开始时,角色默认进入 IdleState。
  • 每帧更新:
  • 物理更新(_physics_process):处理移动、重力。
  • 逻辑更新(_process):检查输入、切换状态。
  • 代码
  • (1) 创建状态机脚本
  • 新建一个脚本 StateMachine.gd,继承自 Node(因为要挂到场景树上)。
  • 声明一个变量 currentState,用来存储当前状态。
  • extends Node
  • class_name StateMachine # 允许其他脚本通过"StateMachine"这个名字引用它
  • var currentState: State # 存储当前状态(假设State是所有状态的基类)
  • (2) 初始化所有状态
  • 在 _ready() 里遍历所有子节点(Idle、Walk、Attack)。
  • 对每个子节点说:"你的父状态机是我",并调用它的初始化方法。
  • func _ready():
  • for child in get_children(): # 遍历所有子状态(Idle、Walk等)
  • var childState = child as State # 确保子节点是"状态"类型
  • childState.parentStateMachine = self # 告诉子状态:"我是你爹(状态机)"
  • childState.Ready() # 让子状态自己初始化(比如加载动画)
  • (3) 设置初始状态
  • 默认把第一个子状态(比如 Idle)设为当前状态。
  • 调用初始状态的 Enter() 方法(比如播放"站立"动画)。
  • currentState = get_child(0) # 第一个子状态是初始状态
  • currentState.Enter() # 进入该状态(比如播放动画)
  • (4) 每帧更新当前状态
  • 在 physicsprocess 里告诉当前状态:"处理物理逻辑"(比如移动角色)。
  • 在 _process 里告诉当前状态:"处理普通逻辑"(比如检测输入)。
  • func physicsprocess(delta):
  • currentState.UpdatePhysics(delta) # 让当前状态处理物理(如重力、移动)
  • func _process(delta):
  • currentState.Update() # 让当前状态处理输入/动画
相关推荐
潜创微科技27 分钟前
HDMI1.3 无线传输芯片方案 空旷 150 米量产级音视频方案
音视频
通信小呆呆31 分钟前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick1 小时前
自动对焦学习-3
人工智能·学习·计算机视觉
VidDown1 小时前
VidDown 工具站:免费、本地优先的开发者工具箱
javascript·编辑器·音视频·视频编解码·视频
换个昵称都难1 小时前
音频格式之WAV
音视频
Daisy Lee1 小时前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
AI创界者1 小时前
PilotTTS 一键整合包(Win/Mac):8G 显存畅跑,实测解锁情绪与副语言的精准控制
人工智能·macos·aigc·音视频
Alsn862 小时前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e2 小时前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨2 小时前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙