2012-02-29 74 views
1

我必须为我的大学课程中的项目编写XNA游戏。我在Gameboy Pokemon游戏中制作了一款回合制RPG游戏。我想将菜单选项与屏幕底部的容器对齐,最多只能有4个选项。这应该给你,我怎么想的战斗画面看一个大概的了解:我应该如何去制作我想装入容器内的游戏菜单?

Pokemon Battle Image

我目前有对齐所有与屏幕中心的菜单项,这意味着菜单最终寻求一个菜单系统像这样:

开始游戏
选项
退出

但在屏幕的中央。

以与上图相似的方式定位菜单项的最佳方式是什么?我是否应该为菜单项硬编码,我是否应该尝试使某种类作为这些项目的容器并使其位置与容器的大小和位置相关,或使用其他方法?

回答

1

如果您不想对位置进行硬编码,它可能会非常复杂,具体取决于您需要多大的灵活性。

我将创建一个容器类,它是一个树形结构的一部分(请参阅scene graph),带有一个父容器和一个子容器列表。这是处理相对定位的最常见方式。这里一个简单的例子:

​​

如果需要,甚至可以创建一个浮动的布局,其中的元素动态定位取决于它们的大小更多的flexibilty。

0

正如Lucius所述,创建一个Container类是最好的解决方案。 目前我正在为XBox开发一个UI应用程序。因此,我需要类似定位引擎的东西,一切都是相对的,所以我不需要每次都计算像素。

我所做的是创建一个容器类,它包含大致如下属性:

VectorTopLeft (Which the element which contains a Container object uses for drawing) 
VectorTopRight 
VectorBottomLeft 
VectorBottomRight 

Align (Enum: Right, Center, Left) 
VerticalAlign (Enum: Top, Middle, Bottom) 
NewRow (bool) 
PreviousContainer (Container) 
ParentContainer (Container) 
Width (Getter) 
Height (Getter) 
PercentageHeight (getter/setter) (Percentage of the height of the parent container) 
PercentageWidth (getter/setter) (Percentage of the width of the parent container) 
PixelHeight (getter/setter) (Absolute height in pixels) 
PixelWidth (getter/setter) (Absolute width in pixels) 
AspectRatio: Used for setting the width to a ratio of the height, usefull for different screen aspects (4/3 or 16/9 for example) 

    MarginLeft 
    MarginRight 
    MarginTop 
    MarginBottom 

以下载体包括边缘,这些都是由对准过程中使用的载体。

AbsoluteVectorTopLeft 
AbsoluteVectorTopRight 
AbsoluteVectorBottomLeft 
AbsoluteVectorBottomRight 

以下尺寸属性还包括利润,有用的计算剩余大小

AbsoluteWidth (getter) 
    AbsoluteHeight (getter) 

然后一些标志,其如果有什么重要的变化,和矢量/大小的东西需要被置为true,重新计算。

对齐的东西是非常复杂的,因为它使用递归,并且还调用先前的容器函数将所有东西都移到正确的位置。

newrow属性告诉系统它需要在父容器的新行处启动该元素,并用于保持垂直对齐。

该系统可能有一些小缺陷,但在这一刻,它作为我所有与GUI相关的定位工具的魅力,并且它的工作速度非常快!

相关问题