如何在实体系统中编码UI / HUD?


18

我想我已经得到了亚当·马丁(t-machine)启发的实体系统的想法。我想开始在下一个项目中使用它。

我已经知道实体,组件和系统的基本知识。我的问题是如何处理UI / HUD。例如,任务窗口,技能窗口,角色信息窗口等。您如何处理UI事件(例如,按下按钮)?这些是不需要每帧都进行处理的东西。目前,我正在使用MVC编写UI,但我认为这与实体系统不兼容。

我读过,实体系统嵌入在更大的OOP中。我不知道UI是否在ES之外。我该如何处理?

Answers:


17

也许您在实体系统中考虑得太多了。实体旨在对游戏中的对象进行范围限定,例如角色,敌人,脚本,项目符号,触发器等。

也许如果您将UI分开,它将变得更好,更轻松。您不必在实体范围内做任何事情。


这也是亚当·马丁(Adam Martin)在t机上的一篇帖子或评论中所说的。ES是针对特定问题的解决方案。它可以并且应该与游戏(引擎)其他方面的更多“传统”解决方案一起使用。
user8363 2012年

谢谢。我只是不确定ES应该包含什么。那么,如何编写有效的UI?我认为MVC不会削减它,因为我在层次结构方面遇到了问题。
西尔菲德(Sylpheed)2012年

我看到您同意为UI使用不同的体系结构。那么MVC有什么问题呢?
Narek

@Armen MVC没问题,但是将其放在实体范围内就可以了。只是它的好处不会克服它的缺点。无需
派遣

3

虽然我认为实体/组件用户界面可能会起作用,但很难做到这一点。此外,它与处理游戏实体所需的组件和系统相去甚远,它实际上只是游戏中的另一个实体/组件系统。我无法想象两者之间会有很多重叠。

实体系统很棒,可能会在任何地方使用它们。毕竟,当您拿到一把非常可爱的锤子时,就会很想像钉子一样对待所有问题。但是,EC系统只是编程包中的另一个工具。对于用于解决问题的问题,它确实可以很好地工作,但是您拥有更好的工具来解决UI等问题。

继承结构对于GUI非常有效。不仅用于创建UI组件,而且还用于布局它们。能够将UI组件作为其他组件的子代,这样它们可以继承诸如position,scale和opacity之类的属性,真是太好了。如果要尝试使用EC系统进行设置,则必须打破EC系统的某些规则。


1

您可以创建一个新的接口函数,该函数在绘制UI / HUD时将被调用,并允许自定义/脚本化组件实现该函数。这需要使用IMGUI系统(Google上有很多教程,这只是原始演示)。这样,您就可以将窗口作为实体,在其中您将拥有自己的UI构建组件和窗口框架渲染器组件。

至于不处理所有这些帧,您可以将所有UI渲染到不同的缓冲区,该缓冲区仅在各种输入/数据事件上进行更新。也就是说,无论何时接收到事件,它都会更改一些变量以指示该窗口需要在下一帧重新绘制。如果该变量为true,则将其设置为false,然后再调用UI接口。如果需要动画,请务必使用此确切的操作顺序,以便UI本身可以触发下一帧的重新绘制,这一点很重要。

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.