游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1847|回复: 4

大家来讨论一下多现态状态机吧~

[复制链接]

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
发表于 2007-3-3 23:42:00 | 显示全部楼层 |阅读模式
我所看到的关于状态机的介绍,讲的都是只有一个现态的状态机,但是现实中有很多事物可以同时处于多个状态,比如一个人可能同时处于“跑动”和“攻击”这两个状态,进一步讲,这同时出现的两个状态都可以独立出现,比如角色只在跑动而没有攻击,或者没有跑动站在原地攻击;这两个状态也可能互相影响,比如跑动时命中率降低,比如攻击时跑动会降低跑动的速度,也可能由“跑动”和“攻击”引起“冲锋”这个衍生状态。所以我觉得单现态的状态机可能表达能力还是不太足够。
我在《游戏编程精粹4》里也看到一篇文章提及这种状态机,只不过这篇文章里它叫做“并行状态机”(缩写为PSM),网上也没搜索到详细的介绍文章,所以想来讨论一下这种状态机的设计与实现,请有经验的大虾介绍一下经验~谢谢~

[em5]

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

积分
1104
QQ
发表于 2007-3-4 01:08:00 | 显示全部楼层

Re:大家来讨论一下多现态状态机吧~

你把奔跑,攻击,冲锋,那些动作形态,都拿OO独立出来吧。

5

主题

18

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2007-3-4 09:19:00 | 显示全部楼层

Re:大家来讨论一下多现态状态机吧~

并行状态机目的是为了使得状态图变得更简单,以利于我们分析问题。就好像一个人有两个大脑,一个是负责控制行进的状态,一个是负责战斗的状态。
对于这种状态间的相互影响,我想可以通过规则系统(RS)来描述,例如:
if 行进速度 > v then 命中率 < h
if 攻击标志=1 then 行进速度 < v (攻击标志在攻击时设定)

我想如果全部用状态机来描述是没有必要的。
              

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2007-3-4 10:39:00 | 显示全部楼层

Re:大家来讨论一下多现态状态机吧~

我现在有一个想法,假如要设计这样一种并行状态机,我们只需要定义少量的状态和行为,然后这个状态机将会排列组合出多种状态和行为,那么我们应该如何设计它?

一种考虑是,详细定义不同状态之间的关系,就像jeff2050所说的,通过一条条的规则定义不同状态之间的影响,而在这些状态控制之下的各种行为之间的关系也用规则进行定义。
但是这样可能需要定义非常多的规则,也就是说需要针对排列组合的结果进行描述。本来应该是让状态机进行排列组合以减轻人的负担,但是现在这样负担还是在人这里。

另一种考虑是,并不针对排列组合的结果进行描述,而是针对排列组合的方法(过程)进行描述,但是具体怎么做我还没什么头绪……
不知各位有什么看法?

5

主题

46

帖子

55

积分

注册会员

Rank: 2

积分
55
QQ
发表于 2007-3-4 11:36:00 | 显示全部楼层

Re: 大家来讨论一下多现态状态机吧~

我的想法

状态(跑)
{
    进入状态(加速,减命中)
    退出状态(减速,加命中)
}
一个实体可以拥有n个状态的链,可以任意添加删除。
状态之间是有冲突的,如"行走","跑步","站立"
所以在添加一个状态的时候要先删除以之冲突的状态.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-4-13 12:30

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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