【问题标题】:Best practice: Design pattern for 2D HUD screen navigation最佳实践:2D HUD 屏幕导航的设计模式
【发布时间】:2010-08-23 08:33:01
【问题描述】:

如果您的应用程序的 GUI 完全用于 2D 绘图,那么处理绘制内容和触摸位置的最佳做法应该是什么?

一个更好理解的例子:
我有一个带地图的游戏。在这张地图上,我可以建造房屋和东西。
我还有一个可以扩展的信息栏。在扩展栏上,我绘制了一些关于游戏的信息,它还提供了更改不同值的界面。如果发生触摸,我必须检查信息栏是否扩展,以确定我是否要更改地图上的某些内容或栏上的某些内容。

这是由状态模式完成的,但我怀疑这是否正确,因为我认为它可能有点复杂,因为可能存在“子状态”。

所以基本上问题是:状态模式(来自 GoF)是处理纯图形 GUI 的最佳实践吗?

【问题讨论】:

    标签: java android user-interface design-patterns state-pattern


    【解决方案1】:

    这通常的工作方式是 UI 是 Control 对象的树。每个控件都有一些边界框,并且可能有许多子控件浮动在它上面。当点击发生时,树从上到下(这意味着孩子在父母之前,兄弟姐妹依次)。对于每个控件,您可以查看该点是否与其边界框相交。如果是这样,给控件一个处理点击的机会(即一些虚拟的OnClick 方法)。如果是,停止处理,点击完成。否则,请继续走,直到找到可以处理它的控件。

    【讨论】:

    • 这就是我所做的,以便能够在地图上构建和定位东西,但这对我来说不是一个完整的答案。确定边界框是否处于活动状态的状态呢?在您的情况下,我必须为每个控制对象处理多个状态。目前,我尝试根据我的情况调整 android 的活动模式。每个不同的“屏幕”都有自己的状态实现,onTouch(), onDraw(), onStateChange()
    • 大多数 UI 系统也会有visibleenabled 可以在给定小部件上设置的状态。禁用它会阻止它接收点击。然后要做的就是保持启用状态与影响它的后端游戏状态同步。事件系统可以提供帮助。
    • 听起来更好...我会尝试以这种方式实现它。谢谢
    猜你喜欢
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多