查看: 558|回复: 4

【GDScript】一个简单的状态机示例

[复制链接]

5

主题

18

帖子

356

积分

中级会员

Rank: 3Rank: 3

积分
356
发表于 2020-8-7 14:53:50 | 显示全部楼层 |阅读模式
本帖最后由 ZuiNiu 于 2020-8-7 14:53 编辑

extends Node

#枚举状态
enum STATE{
        IDLE
        WALK
        RUN
        ATTACK
}

#当前状态
var state = STATE.IDLE

func _unhandled_input(event):
        #例如在这两种情况下改变状态
        if event.is_action_pressed("left_mouse_button"):
                change_state(STATE.ATTACK)
        if event.is_action_pressed("key_w"):
                change_state(STATE.WALK)

func _process(delta):
        #比对状态值
        match state:
                STATE.IDLE:
                        #IDLE状态下干什么
                        #例如:
                        if !$AnimationPlayer.is_playing():
                                $AnimationPlayer.play("idle")
                STATE.WALK:
                        #WALK状态下干什么
                        #例如:
                        if !$AnimationPlayer.is_playing():
                                $AnimationPlayer.play("walk")
                STATE.RUN:
                        #RUN状态下干什么
                        pass
                STATE.ATTACK:
                        #ATTACK状态下干什么
                        pass

#切换状态的方法
func change_state(_state):
        match _state:
                STATE.IDLE:
                        #这里可以加一些状态间过渡的东西
                        state = STATE.IDLE
                STATE.WALK:
                        #这里可以加一些状态间过渡的东西
                        state = STATE.WALK
                STATE.RUN:
                        #这里可以加一些状态间过渡的东西
                        state = STATE.RUN
                STATE.ATTACK:
                        #这里可以加一些状态间过渡的东西
                        state = STATE.ATTACK
先前好像为了给个新人演示随手写的(o゚ω゚o)希望有用

回复

使用道具 举报

9

主题

25

帖子

128

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
128
发表于 2020-8-8 19:06:41 | 显示全部楼层
不错不错
回复

使用道具 举报

0

主题

4

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2020-8-10 15:55:24 | 显示全部楼层
虽然还看不懂,也不知道会有会有看懂的一天,还是感谢分享
回复

使用道具 举报

5

主题

18

帖子

356

积分

中级会员

Rank: 3Rank: 3

积分
356
 楼主| 发表于 2020-8-10 23:20:07 | 显示全部楼层
22353255 发表于 2020-8-10 15:55
虽然还看不懂,也不知道会有会有看懂的一天,还是感谢分享

我觉得我应该写的挺清楚了。根据你的游戏,自己定义STATE枚举的内容,如“受攻击”、“跳跃”等,然后状态机就是在每种状态下 执行相应的代码,方便阅读、修改、增加新内容
回复

使用道具 举报

2

主题

6

帖子

42

积分

新手上路

Rank: 1

积分
42
发表于 2021-1-7 11:50:03 | 显示全部楼层
很棒很棒
回复

使用道具 举报

高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Godot中文社区

GMT+8, 2021-5-11 15:37 , Processed in 0.125482 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2020, Godoter.top

快速回复 返回顶部 返回列表