Questions tagged «state»

通常与状态机关联使用。

10
游戏状态“堆栈”?
我在考虑如何在游戏中实现游戏状态。我想要的主要内容是: 半透明顶部状态-可以通过暂停菜单查看后面的游戏 面向对象的东西,我发现这更易于使用和理解其背后的理论,以及保持组织规范并添加更多内容。 我打算使用链接列表,并将其视为堆栈。这意味着我可以访问下面的状态以获得半透明性。 计划:将状态堆栈作为指向IGameStates的指针的链接列表。顶部状态处理其自己的更新和输入命令,然后具有成员isTransparent来决定是否应绘制下面的状态。 然后我可以做: states.push_back(new MainMenuState()); states.push_back(new OptionsMenuState()); states.pop_front(); 要表示播放器的负载,请依次转到选项和主菜单。 这是个好主意,还是...?我应该看看别的东西吗? 谢谢。

11
替代游戏状态系统?
据我所知,大多数游戏都有某种“游戏状态系统”,可以在不同的游戏状态之间进行切换。这些可能是“ Intro”,“ MainMenu”,“ CharacterSelect”,“ Loading”和“ Game”之类的东西。 一方面,将它们分成一个状态系统是完全有意义的。毕竟,它们是完全不同的,否则将需要包含在大的switch语句中,这显然很混乱。它们肯定由国家系统很好地代表。但是同时,我查看了“游戏”状态,想知道这种状态系统方法是否存在问题。因为就像房间里的大象。这是巨大且显而易见的,但没人质疑游戏状态系统的方法。 对我来说,“游戏”与“主菜单”处于同一级别似乎很愚蠢。但是,没有办法打破“游戏”状态。 游戏状态系统是最好的方法吗?是否有一些更好的技巧来管理“游戏状态”?有一个介绍电影的状态并听其进入的介绍状态,然后是在资源管理器上循环的加载状态,然后是实际上可以完成所有工作的游戏状态,这可以吗?这对您来说似乎也不平衡吗?我想念什么吗?

4
游戏状态管理技巧?
首先,我不是指场景管理;我将游戏状态大致定义为游戏中涉及到是否应启用用户输入或是否应暂时禁用某些参与者等方面的任何状态。 举一个具体的例子,假设它是经典《 Battlechess》的游戏。在我采取另一名球员的棋子之后,便进行了短暂的战斗。在此序列中,不应允许玩家移动棋子。那么,您将如何跟踪这种状态转换?有限状态机?一个简单的布尔检查?看起来后者只会对状态变化很少的游戏有效。 我可以想到许多使用有限状态机来处理此问题的简单方法,但我也可以看到它们很快就变得一发不可收拾。我只是想知道是否还有一种更优雅的方式来跟踪游戏状态/过渡。
24 state 

1
行为树代码示例?
http://altdevblogaday.org/2011/02/24/introduction-to-behavior-trees/ 显然,我在该网站上找到了最有趣的文章。你怎么看待这件事 ? 它缺少一些代码示例,您不知道吗?我还读到状态机与行为树相比不是很灵活……最重要的是,我不确定状态机与状态模式之间是否存在真正的联系……?
23 ai  state  tree  behavior 

3
回合制游戏的设计,其中动作有副作用
我正在编写游戏Dominion的计算机版本。这是一种基于回合制的纸牌游戏,其中动作卡,宝物卡和胜利点卡累积在玩家的个人卡组中。我已经很好地开发了类结构,并且我开始设计游戏逻辑。我正在使用python,稍后可能会在pygame中添加一个简单的GUI。 玩家的回合顺序由一个非常简单的状态机控制。顺时针旋转通过,玩家无法在游戏结束之前退出游戏。单圈游戏也是一种状态机。通常,玩家经历“行动阶段”,“购买阶段”和“清理阶段”(按此顺序)。根据问题的答案,如何实现回合制游戏引擎?在这种情况下,状态机是一种标准技术。 我的问题是,在玩家的动作阶段,她可以使用对自己或其他一个或多个玩家有副作用的动作卡。例如,一张动作卡允许玩家在当前回合结束后立即进行第二回合。另一张动作牌会使所有其他玩家从其手上弃掉两张牌。在当前回合中,还有另一张动作卡不起作用,但允许玩家在下一回合中抽出额外的卡。为了使事情变得更加复杂,游戏中经常会有新的扩展添加新的牌。在我看来,将每个动作卡的结果硬编码到游戏的状态机中既丑陋又不适应。回合制策略循环的答案 并未详细介绍解决该问题的设计。 我应该使用哪种编程模型来包含一个事实,即转弯时的一般模式可以通过转弯内发生的动作来修改?游戏对象是否应该跟踪每张动作卡的效果?或者,如果卡应实现自己的效果(例如,通过实现接口),则需要什么设置才能赋予它们足够的功率?我已经想出了一些解决此问题的方法,但是我想知道是否存在解决该问题的标准方法。具体来说,我想知道哪个对象/类/什么负责跟踪每个玩家由于打出一张动作卡而必须执行的动作,以及与正常顺序中的临时更改有何关系转弯状态机。

5
在战斗中禁用游戏保存的原因(例如质量效应2)
因此,我一直在玩《质量效应2》(PC),我注意到的一件事是,只有在不参与战斗的情况下才能保存游戏。一旦第一个敌人出现在您的雷达上,保存按钮便被禁用。战斗结束后,将再次显示保存功能。 假设质量效应2是状态机似乎是合理的,因此,可以随时捕获程序的内部状态并在以后重新加载。这基本上是一个已解决的问题-自《半条命》时代以来,游戏就是以此方式设计的。假设BioWare决定不遵循此模型时,他们知道自己在做什么,这似乎也是合理的。没有一些充分的理由,BioWare就不会像以前那样做。 有什么原因在战斗中禁用游戏保存功能?

2
基于组件的实体系统中的游戏状态和输入处理
我的问题是: 如何在我的实体系统中处理游戏状态,而又不保留周围的游戏状态对象堆栈? 因此,我的实体系统的设计意味着,例如,当某个实体需要注册输入事件时,输入组件将调用输入系统,并说“为此输入注册此实体”。一切都很好,但是,如果您将游戏状态的概念(例如暂停屏幕)加入其中,那么确定实体是否处于当前状态并应接收输入就变得很困难。 我可以扩充输入组件/系统,使其说“在处于这些游戏状态时为此输入注册此实体”,但这要求每个实体都知道将在其中使用哪个状态,这可能并不明显。同样,在每个注册的输入(以及其他使用回调的系统)周围保留游戏状态列表听起来并不太有效。 我有另一个想法,因为将有一个代表游戏状态的实体,将其标记为已禁用,然后在生成输入事件时检查该实体不是已禁用游戏状态实体的后代。为每个回调计算父级似乎很昂贵。 另一个想法是让所有系统针对当前状态存储其数据密钥,这样,在生成输入时,目标实体甚至都不是候选对象。但是,这确实损害了允许处于不同状态的实体之间进行通信的能力(对于暂停屏幕而言,这并不是什么大问题,但请考虑Oblivion / Skyrim中的锁定选择)。 我唯一的另一个想法是让所有组件处理状态更改事件并与相关系统进行通信以禁用其已注册的任何内容,并在切换回此状态时重新启用它。 第二个(将对象标记为已禁用)和第四个(使每个组件都处理状态更改)似乎是我的最佳想法,但是没有一个想法特别出色。 还有其他人对此有其他想法吗? 编辑当我谈论输入专门在这个问题上,它可能意味着能够发送消息/事件的实体,如碰撞,定时器事件等的任何系统...

3
C ++中的有限状态机
因此,我已经阅读了很多有关使用FSM进行游戏状态管理的知识,例如FSM是什么,以及使用堆栈或状态集构建状态。我经历了所有这些。但是,我一直坚持为此目的编写一个经过精心设计的FSM 实际实现。具体而言,一个人如何干净地解决状态之间的转换问题(一个状态应该如何使用其他状态的数据),等等。有没有人有使用C ++设计或编写实现的技巧,或者还有更好的代码示例?

2
数据驱动的动画状态
编辑:澄清我的问题是什么:这是处理内容创建/管理中游戏引擎中动画/动画状态的好方法吗?这样做的缺点是什么?将有替代方法吗?-尽管我的回答在评论中得到了部分回答,但这似乎是必经之路。 我正在尝试在2D游戏引擎爱好项目中处理动画,而无需对其进行硬编码。在我看来,硬编码动画状态似乎是一种常见但非常奇怪的现象。 一些背景知识:我正在使用一个实体系统,在该系统中组件是数据包,而子系统则对它们起作用。我选择使用轮询系统来更新动画状态。 对于动画状态,我的意思是:“ walking_left”,“ running_left”,“ walking_right”,“ shooting”,... 我处理动画的想法是将其设计为数据驱动模型。数据可以存储在xml文件,rdbms等文件中,也可以在游戏/关卡/开始时加载。通过这种方式,您可以轻松地编辑动画和转场,而不必在您的各处更改代码游戏。 作为示例,我制作了一个我想到的数据定义的xml草案。 一个非常重要的数据就是动画的描述。动画将具有唯一的ID(描述性名称)。它将保存图像的参考ID(它使用的Sprite表,因为不同的动画可能使用不同的Sprite表)。每秒运行动画的帧数。此处的“重播”定义了动画应运行一次还是无限次运行。然后,我将矩形列表定义为框架。 <animation id='WIZARD_WALK_LEFT'> <image id='WIZARD_WALKING' /> <fps>50</fps> <replay>true</replay> <frames> <rectangle> <x>0</x> <y>0</y> <width>45</width> <height>45</height> </rectangle> <rectangle> <x>45</x> <y>0</y> <width>45</width> <height>45</height> </rectangle> </frames> </animation> 动画数据将被加载并保存在动画资源池中,并由使用它的游戏实体引用。它将被视为资源,例如图像,声音,纹理,... 要定义的第二个数据将是用于处理动画状态和过渡的状态机。这定义了游戏实体可以处于的每个状态,可以过渡到的状态以及触发状态改变的原因。 每个实体的状态机都不同。因为鸟类可能具有“行走”和“飞行”状态,而人类只有“行走”状态。但是它可以由不同的实体共享,因为多个人可能具有相同的状态(尤其是当您定义一些常见的NPC(例如怪物等)时)。另外,兽人的状态可能与人类相同。只是为了说明该状态定义可以共享,但只能由一组选定的游戏实体共享。 <state id='IDLE'> <event trigger='LEFT_DOWN' goto='MOVING_LEFT' /> <event trigger='RIGHT_DOWN' goto='MOVING_RIGHT' /> </state> <state id='MOVING_LEFT'> <event …
14 animation  state  fsm 

3
是否存在用于编写通过套接字与n个客户端通信的基于回合的服务器的模式?
我正在使用一种通用游戏服务器,该服务器可以为任意数量的TCP套接字网络客户端在玩游戏时管理游戏。我有一个“设计”与管道胶带一起被破解,但它既脆弱又不灵活。对于如何编写健壮而灵活的客户端/服务器通信,是否存在一种完善的模式?(如果没有,您将如何改善下面的内容?) 大概我有这个: 设置游戏时,服务器为每个玩家套接字提供一个线程,以处理来自客户端的同步请求和来自服务器的响应。 然而,一旦游戏开始,除了一个睡眠之外,所有线程都将循环,并且该线程一次循环遍历所有玩家,以传达有关其行动的信息(反向请求响应)。 这是我目前所拥有的图表;单击以获取较大的版本/可读的版本,或单击66kB PDF。 问题: 它要求玩家用正确的信息准确地依次做出回应。(我想我可以让每位球员随机回应,只有在他们给我有效举动后才继续前进。) 除非轮到他们,否则不允许玩家与服务器交谈。(我可以让服务器向他们发送有关其他播放器的更新,但不处理异步请求。) 最终要求: 性能不是最重要的。这将主要用于非实时游戏,并且主要用于使AI相互对抗,而不是抽动的人。 游戏将始终基于回合制(即使分辨率很高)。每个玩家总是在其他所有玩家获得回合之前获得一招。 服务器服务器的实现恰好在Ruby中,如果有所不同的话。

5
游戏状态保存/加载?
什么是保存游戏状态(配置文件),数据库文本文件的最常用方法或算法,加密方式以及相关内容。 我已经看到Caesar IV使用了mySQL。 有什么建议。
12 state 

2
如何在基于实体/组件的系统中构造游戏状态
我在做设计与实体分量范例,使用系统组件之间的通信,说明游戏在这里。在开发过程中,我已经达到需要添加游戏状态(例如暂停,播放,关卡开始,回合开始,游戏结束等)的地步,但是我不确定如何在我的框架中进行操作。我看这对游戏状态的代码示例,每个人都似乎是参考,但我不认为它与我的框架适合。似乎每个状态都处理自己的绘图和更新。我的框架有一个SystemManager,可以处理使用系统进行的所有更新。例如,这是我的RenderingSystem类: public class RenderingSystem extends GameSystem { private GameView gameView_; /** * Constructor * Creates a new RenderingSystem. * @param gameManager The game manager. Used to get the game components. */ public RenderingSystem(GameManager gameManager) { super(gameManager); } /** * Method: registerGameView * Registers gameView into the RenderingSystem. * @param gameView …

3
如何在基于组件的游戏中更新实体状态和动画?
我正在尝试设计一种基于组件的实体系统,以供学习(以及以后在某些游戏中使用),并且在更新实体状态时遇到了一些麻烦。 我不想在组件内部使用update()方法来防止组件之间的依赖关系。 我目前要记住的是,组件保存数据,而系统更新组件。 因此,如果我有一个简单的2D游戏,其中包含一些具有“变形”,“运动”,“状态”,“动画”和“渲染”组件的实体(例如玩家,敌人1,敌人2),我认为我应该拥有: 一个MovementSystem,用于移动所有Movement组件并更新State组件 还有一个RenderSystem,用于为每个状态更新Animation组件(animation组件应具有一个动画(即一组帧/纹理),并对其进行更新意味着选择与当前状态相对应的动画(例如,jumping,moving_left等),以及更新框架索引)。然后,RenderSystem使用与每个实体的Animation的当前帧相对应的纹理更新Render组件,并将所有内容呈现在屏幕上。 我已经看到了一些像Artemis框架的实现,但是我不知道如何解决这种情况: 假设我的游戏包含以下实体。每个实体都有一组状态和每个状态一个动画: 播放器:“ idle”,“ moving_right”,“ jumping” 敌人1:“上移”,“下移” 敌人2:“向左移动”,“向右移动” 为了更新每个实体的当前状态,最常用的方法是什么?我唯一能想到的就是为每个实体组分别具有单独的系统以及单独的State和Animation组件,因此我将拥有PlayerState,PlayerAnimation,Enemy1State,Enemy1Animation ... PlayerMovementSystem,PlayerRenderingSystem ...但我认为这很不好解决方案并打破了拥有基于组件的系统的目的。 如您所见,我在这里很迷路,因此非常感谢您的帮助。 编辑:我认为使这项工作如我所愿的解决方案是: 使statecomponent和animationcomponent具有足够的通用性,可用于所有实体。它们包含的数据将成为修改诸如播放动画或可用状态之类的修改器。–字节56 现在,我试图弄清楚如何设计这两个通用组件,以便我可以重用它们。可以为每个状态(例如,步行,跑步...)设置UID并将动画存储在地图中并由该标识符作为键的AnimationComponent中吗?


2
陈述实体或组件的变化
我在确定如何处理实体中的状态管理时遇到了一些麻烦。 我对游戏状态管理没有任何麻烦,例如暂停和菜单,因为它们没有作为实体组件系统处理;只是带有实体/组件中的状态。 以“兽人必须死”为例,我有MainCharacter和Trap实体,它们只有诸如PositionComponent,RenderComponent和PhysicsComponent之类的组件。 在每次更新时,实体都会调用其组件的更新。我也有一个通用的EventManager,带有用于不同事件类型的侦听器。 现在,我需要能够放置陷阱:首先选择陷阱和陷阱位置,然后放置陷阱。 放置陷阱时,它应该出现在MainCharacter的前面,以不同的方式呈现并跟随它。放置后,它应仅响应碰撞并以常规方式进行渲染。 通常在基于组件的系统中如何处理? (此示例是特定的,但可以帮助您确定处理实体状态的一般方法。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.