level 1
情况是这样的,我目前正在一个RPG游戏的早期开发阶段,这类游戏一般有大量的剧情、对话、动画、任务、特殊事件等,结果就是我使用了大量boolean来判断游戏进行到哪个阶段、玩家与NPC进行了哪些对话、是否完成某些任务等,并且依靠这些boolean来推进游戏。
比如说在1个关卡中,只有当玩家达成某3个条件时,才会出现特殊动画,并且推进剧情进行到下一关;或者是当玩家完成某个剧情或者任务后,部分NPC的状态(位置,外观,名称,可提供的对话和任务等等)会改变。诸如此类判断某种条件是否达成从而影响游戏内容的情况在RPG游戏中无处不在。
如果按照这种方式,在游戏完成后可能会有上千个boolean来记录游戏状态,而我想不到什么其他的解决方法,请问这种做法是正常的吗?还是有什么更好、更有效率的方法?
2025年06月17日 00点06分
1
level 6
用枚举enum:byte,一个bool占1字节,1个枚举也是1字节,但是枚举可以列举很多种状态,你可以把同类的判断放到枚举里,用switch case来逐个判断,避免二选一的if套if
2025年06月17日 07点06分
2
比如说玩家的站立,行走,跑步,蹲下,这些属于并列状态,一次仅只会处于其中一种状态,就可以用一个枚举,而不需要用4个bool
2025年06月17日 07点06分
这个本质上也和bool也算一个解决方案,就是用变量来记录游戏的不同状态,只不过枚举更节省性能。我好奇的就是大型游戏项目也是用类似的方法吗?如果是3A级别的游戏最后岂不是会有成千上万个变量来记录玩家所有在游戏中完成过哪些行为?
2025年06月18日 12点06分
@Gself 有那么多也不奇怪,bool是最底层逻辑还想怎样,大的项目一般是继承接口,每个行为都有判断接口,但是本质也是返回bool值,虽然会很多,但是格式都是一样的,不会说看不懂,很方便的
2025年06月18日 15点06分
@Gself 还有不会有那么多公共变量,要学会总结归纳,不要写重复代码,把具体的行为归纳成一个类,类只写需要用到的变量,不要把所有代码都写在一起,多态和继承用起来
2025年06月18日 16点06分
level 6
然后可以看一下有限状态机或者行为树的写法,玩家或者NPC的状态写成一个类,行为写成行为类,行为类只关注行为的判断条件或者前提条件,这样对于你的角色只会判断正在执行或者将要执行的行为的条件,不会把所有判断都执行一遍
2025年06月17日 07点06分
3
level 6
这个感觉可以用树结构来做存储啊,从一个节点开始,每个节点下存储接下来能到达的节点,然后节点标识可以用字符啥的标记,然后当前节点就可以用从根节点到当前节点所有遍历过得节点标识组合形成一个key值
2025年06月20日 12点06分
5
如果当前节点进入下一个条件的节点有多个与条件或者非条件,可以在当前节点内部另外处理。这是一个可能的思路吧,暂时只想到这些
2025年06月20日 12点06分
level 4
当然不是正常的。
简单一点的话,毕竟你是rpg游戏,你可以参考rpgmaker系列的方案,用标签来管理一个开关字典,靠id引用。
这至少比一堆的bool写死在代码里好,也更好存档。
2025年06月22日 23点06分
6
level 13
做数据管理,而不是新建一堆BOOL变量,你弄个字典用string当key bool当值都比你这个好。另外建议枚举 数值(int)和bool混用来做判断依据。
2025年06月23日 09点06分
7
level 1
这边是你系统设计的问题,NPC可以分为固定NPC和任务NPC,固定NPC一般是位置不会动,对话也不会变,任务NPC是根据任务生成,里面的对话内容是跟着任务,同一个NPCid,可以配不同的任务对话,主要看你怎么设计
2025年07月04日 07点07分
8