游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6475|回复: 16

[讨论]关于多个状态机的配合

[复制链接]

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
发表于 2004-11-18 09:58:00 | 显示全部楼层 |阅读模式
我在设计游戏,游戏里的对象里有若干个状态机(是动态组合的,数量会变化),每个状态机有一个状态数据集,还有若干个行为集合,根据状态数据集里的状态数据来决定使用哪个行为集合来响应外界的刺激(也就是外界的函数调用)。但是一个对象会由多个状态集合来描述,比如一个人物被施加了魔法盾这个魔法,那么这个人物里就会有两个状态集合:一个用来描述人物的生命、法力等属性,一个用来描述“具有魔法盾”这个状态。这时外界对这个人物施加任何魔法都会减少效果,但是这得由第二个状态机来实现,但是人物本身无法理解“魔法盾”这个概念,在它被通知“被某某施加了某某魔法”时它并不知道需要让第二个状态机来应付这种外界刺激,但是这时显然需要让魔法盾所在的状态机来执行一些操作(减少魔法的效果),而且不仅仅需要魔法所在的状态机来响应这种外界刺激,由于魔法盾发挥作用后生命值等状态数据仍然会受到魔法的影响,所以这时还需要第一个状态机进行响应,而且必须要和魔法盾所在的状态机相互配合。
我所要解决的问题是:当使用多个状态机来描述一个对象时,应该采用怎样的一种机制来实现各个状态机之间的通讯和配合。附加条件:1.各个状态机之间可能根本不认识,因为可能有些是在程序写好后又从一些连接库里读取出的新的状态机;2.一个对象里会有若干个子对象,这些子对象也一样会由若干个状态机来描述,这些子对象、状态机之间同样可能互相不认识,对象是一个树状的结构。
另外,我准备把处理用户操作命令的模块也做成状态机,和其他状态机放在一起。

68

主题

710

帖子

719

积分

高级会员

Rank: 4

积分
719
QQ
发表于 2004-11-18 10:04:00 | 显示全部楼层

Re:[讨论]关于多个状态机的配合

我准备把处理用户操作命令的模块也做成状态机,和其他状态机放在一起。
>>>>>>>>>>>>
可以

13

主题

97

帖子

97

积分

注册会员

Rank: 2

积分
97
发表于 2004-11-18 10:35:00 | 显示全部楼层

Re:[讨论]关于多个状态机的配合

我也遇到了同样的问题,我是学习技术精粹2上的实体工厂一文产生的疑问。那篇文章好像一个角色在同一时间内,只可以有一个状态。可如果是一个有子物体的3d物体,同时具有多种状态该如何呢?,我想会不会要遍历子物体,然后把所有的状态放在一个链表里,每帧遍历一次。。。乱弹。。。

6

主题

21

帖子

43

积分

注册会员

Rank: 2

积分
43
QQ
发表于 2004-11-18 18:44:00 | 显示全部楼层

Re:[讨论]关于多个状态机的配合

状态机也是可以嵌套的

8

主题

71

帖子

71

积分

注册会员

Rank: 2

积分
71
发表于 2004-11-19 08:11:00 | 显示全部楼层

Re:[讨论]关于多个状态机的配合

一个对象只有一个状态,  生命,法力,是否有魔法盾等等多个属性合在一起称为一个状态, 子对象继承父对象中的所有状态属性并可以增加新的属性.  根据行为的类型划分状态机,  一个行为可以使一个对象从一个状态转换到另一个状态. 例如, 在它被通知“被某某施加了某某魔法”时, 调用魔法类状态机

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2004-11-19 09:31:00 | 显示全部楼层

Re:[讨论]关于多个状态机的配合

没弄明白楼主的问题是什么。
状态机的概念是某个一组状态的集合,初试状态集合经过一系列的指令,改变为另一个状态的集合。

一个对象,只有一个状态机。
你说的只能叫状态子集,状态机是所有的状态的集合。

8

主题

71

帖子

71

积分

注册会员

Rank: 2

积分
71
发表于 2004-11-19 10:48:00 | 显示全部楼层

Re:[讨论]关于多个状态机的配合

tarkey说的不错, 一个对象只有一个状态机, 一个对象在某一时候只能处于状态机中的一个状态, , 如果要模块化的话, 也可以从割点切分, 可以把一个状态机分成好多个子状态机, 割点包刮在两个子状态机中

割点定义:如果u 是G中的一个顶点,且G-{u}不连通,则称u是G的一个割点。

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2004-11-19 12:20:00 | 显示全部楼层

Re:[讨论]关于多个状态机的配合

如果一个对象具有多个状态机呢?毕竟现实里每个对象可能同时处于多个状态之中……而这些同时存在的状态机之间的配合就成了一个问题……

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2004-11-19 15:34:00 | 显示全部楼层

Re:[讨论]关于多个状态机的配合

呵呵,割点是图论里面的概念了。
跟状态机的关系不大。

一个对象可以有对个状态,但是多个状态的集合才是一个状态机。
举个例子吧,比如你有:
hp = 100
mana = 120
中毒时间 = 50
这三个状态,那么这三个状态的集合就是你的状态机当前的状态,明白了吗?

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2004-11-19 23:08:00 | 显示全部楼层

Re:[讨论]关于多个状态机的配合

问题是……一个状态机一般只能同时处于一个状态对吧?但是实际生活中的对象却会同时处于多个状态。虽然一个状态机里也可以有多个状态数据,但是只有其中的一项数据能决定采用哪个行为集合来响应外界刺激;而多个状态机组合后,可以有多组行为集合并行地切换(或者说只要是互不矛盾的操作,那些行为集合是不互斥的)。而且还有一点,我希望在游戏做好后还能灵活地扩展游戏,比如说增加魔法,如果我的新魔发无法用原有的状态数据来表示呢?如果这时能写一个新的状态机并放在一个动态连接库里,那么可以让游戏读入这个状态机,并把这个新的状态机复合到原有的对象中,这时不可避免地会出现一个对象具有多个状态机的情况。

唉,上次想去书店找本离散数学先看看……结果没找到……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-23 09:02

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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