最佳实践:2D HUD屏幕导航的设计模式

4
如果您有一个完全基于2D绘图的GUI应用程序,如何处理要绘制什么和在哪里触摸的最佳实践是什么?
以下是一个更好理解的例子: 我有一个地图游戏。在这张地图上,我可以建造房屋等。 我还有一个信息栏,可以展开。在扩展的栏中,我会绘制一些关于游戏的信息,并提供接口来更改不同的值。如果发生触摸,则必须检查信息栏是否已展开,以确定我想要更改地图上的某些内容还是栏上的某些内容。
这是通过状态模式完成的,但我对此存有疑虑,因为我认为由于可能存在“子状态”,它可能会有点复杂。
所以基本问题是:从GoF中,状态模式是处理纯图形GUI的最佳实践吗?
1个回答

2

通常的做法是将UI表示为控件对象树。每个控件都有一个边界框,可能还有一些浮动在其上方的子控件。当发生点击事件时,从上到下遍历树(即先处理子节点,再处理父节点,兄弟节点按顺序处理)。对于每个控件,检查点是否与其边界框相交。如果相交,则让该控件有机会处理点击(即某些虚拟OnClick方法)。如果处理了点击,则停止处理,该点击已完成。否则,继续遍历直到找到处理它的控件。


这是我为了能够在地图上构建和定位物品所做的事情,但对我来说这还不是一个完整的答案。那么,决定边界框是否处于活动状态的状态又是什么呢?在您的情况下,我必须为每个控件对象处理多个状态。目前,我尝试适应Android的活动模式。每个不同的“屏幕”都有自己的状态实现,包括onTouch(), onDraw(), onStateChange() - WarrenFaith
大多数UI系统还将具有可在给定小部件上设置的“可见”或“启用”状态。禁用它将防止其接收点击。然后,任务是保持启用状态与影响它的后端游戏状态同步。事件系统可以在这方面提供帮助。 - munificent
听起来不错,我会尝试以这种方式实现。谢谢。 - WarrenFaith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接