用于UI的Xbox XNA导航逻辑

时间:2012-03-03 17:18:24

标签: xna xbox360

我正在使用XNA为XBox开发一个应用程序,并使用自定义的UI框架。 为此,我开发了导航系统,导航系统的工作原理如下:

系统存在页面,每个页面都包含子UI元素,这些元素都有 我打电话给他们的一个或多个PageTab。

页面板是对象,具有2个属性,X和Y. (我知道我可以使用Point,但是pagetab类也有一些方法)

根据系统的当前状态,我检查输入,并使用正确的pagetab在元素上引发事件。 所以我有这个数组: 页[] { 开始, 出口, 设置, ...}

然后,我使用enum作为我的状态,比如Start,并访问页面可导航元素,如下所示:

页[开始] .Navigatables []

这是一个包含页面所有页面标签的数组。当你下降时,Y会增加,反之亦然。对于X

也是如此

这很好用,它保持最大和最大最小Y& X值,因此总会被选中。

然而,这个系统有一个主要缺陷,它只能输入1个状态。 但是我说我在起始页面上, 所以我的状态是Start,我有一个弹出窗口,有2个按钮,pagetabs: (1,1)& (2,1)

当前设计的系统将使用所选的pagetab查找当前状态中的所有元素,但我需要这样做,以便如果弹出窗口可见,只有弹出窗口接受导航,其他一切都赢了“ t对用户输入(游戏手柄)作出反应。

我正在考虑在PageTab类中添加一个额外的List,其中包含元素可以接受输入的“子状态”,但必须有更好的方法,不存在吗?

我希望我解释得足够好,如果你需要更多信息,我会很乐意提供它。

2 个答案:

答案 0 :(得分:0)

我建议在你的系统中使用某种标志,这样当你弹出一个弹出窗口时。它将所有其他元素标记为已禁用。然后当您关闭弹出窗口时,重新启用其他元素。您可以在将输入传递给元素时检查此标志,以便您只将其发送到已启用的元素。

答案 1 :(得分:0)

我选择了额外的Z-index方法。 对某些元素使用不同的Z-index并捕获此输入就像一个魅力。 我还添加了一个标志:IndependentNavigation,它确保一些元素与Z-index无关(例如,当打开下拉列表时,可以点击不同的地方)

相关问题