【极简】Godot 4.4 有限状态机

该文章已生成可运行项目,

无望其速成,无诱于势利。

一、展示

本文实现简易有限状态机—— 空闲/行走/跳跃。

请添加图片描述

二、复刻

(一)节点结构

1. player.tscn

  • Player(CharacterBody2D)
    • AnimateSprite2D
    • CollisionShape2D
    • NodeState(Node)
      • Idle(Node)
      • Walk(Node)
      • Jump(Node)

2. test_scene.tscn

  • TestScene(Node2D)
    • Player(player.tscn):见1
      • Camera2D
    • StaticBody2D
      • CollisionShape2D

在这里插入图片描述
在这里插入图片描述

(二)独立资源/脚本

1. state.gd(状态基类)

功能:被所有状态子类继承的父类模板,状态子类在此基础上重写方法

class_name State
extends Node
## 状态基类
## 用于状态模式中表示一个状态,子类应继承此类并实现具体状态逻辑

@warning_ignore("unused_signal")
signal transition  # 当前状态发出转换信号 


# 状态处理函数(每帧调用)
func _on_process(_delta : float) -> void:
	pass


# 物理处理函数(固定时间步长调用)
func _on_physics_process(_delta : float) -> void:
	pass


# 状态转换条件检测(由状态管理器定期调用)
func _on_next_transitions() -> void:
	pass


# 状态进入时回调
# 当状态到此状态时自动调用,用于初始化状态相关逻辑
func _on_enter() -> void:
	pass


# 状态退出时回调
# 当状态机切换出此状态时自动调用,用于清理状态相关资源
func _on_exit() -> void:
	pass
	

2. game_input.gd

功能:管理游戏输入逻辑

class_name GameInput
extends Node


static func movement_input() ->float:
	# 获取键盘输入方向:-1/0/1
	var direction = Input.get_axis("left", "right")
	
	return direction
	
static func is_movement_input() ->bool:
	if movement_input() == 0.0:
		return false
	return true

(三)附加脚本

1. player.gd(玩家脚本)

附加到player.tscn中的 Player(CharacterBody2D)节点:

class_name Player
extends CharacterBody2D

const SPEED: float = 100.0

var direction: float

2. state_machine.gd(状态管理器)

附加到player.tscn中的 StateMachine(Node)节点:

class_name StateMachine
extends Node

@export var initial_state : State

var states : Dictionary = {
   
   }
var current_state : State
var current_state_name : String
var parent_name: String


func _ready() 
本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ForBigData

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值