Answers:
也许您在实体系统中考虑得太多了。实体旨在对游戏中的对象进行范围限定,例如角色,敌人,脚本,项目符号,触发器等。
也许如果您将UI分开,它将变得更好,更轻松。您不必在实体范围内做任何事情。
虽然我认为实体/组件用户界面可能会起作用,但很难做到这一点。此外,它与处理游戏实体所需的组件和系统相去甚远,它实际上只是游戏中的另一个实体/组件系统。我无法想象两者之间会有很多重叠。
实体系统很棒,可能会在任何地方使用它们。毕竟,当您拿到一把非常可爱的锤子时,就会很想像钉子一样对待所有问题。但是,EC系统只是编程包中的另一个工具。对于用于解决问题的问题,它确实可以很好地工作,但是您拥有更好的工具来解决UI等问题。
继承结构对于GUI非常有效。不仅用于创建UI组件,而且还用于布局它们。能够将UI组件作为其他组件的子代,这样它们可以继承诸如position,scale和opacity之类的属性,真是太好了。如果要尝试使用EC系统进行设置,则必须打破EC系统的某些规则。
您可以创建一个新的接口函数,该函数在绘制UI / HUD时将被调用,并允许自定义/脚本化组件实现该函数。这需要使用IMGUI系统(Google上有很多教程,这只是原始演示)。这样,您就可以将窗口作为实体,在其中您将拥有自己的UI构建组件和窗口框架渲染器组件。
至于不处理所有这些帧,您可以将所有UI渲染到不同的缓冲区,该缓冲区仅在各种输入/数据事件上进行更新。也就是说,无论何时接收到事件,它都会更改一些变量以指示该窗口需要在下一帧重新绘制。如果该变量为true,则将其设置为false,然后再调用UI接口。如果需要动画,请务必使用此确切的操作顺序,以便UI本身可以触发下一帧的重新绘制,这一点很重要。