【发布时间】:2011-07-19 19:15:23
【问题描述】:
好的,总结一下我正在做的事情,我是一个大学团队的一员,该团队希望为 Microsoft Surface 开发一款回合制、网格场、战略游戏。我的问题不涉及基于触摸的控制的任何问题,所以不用担心。此游戏将使用 WPF 和 .NET 3.5 Framework 为 Surface 开发。
游戏的战斗系统将与 Fire Emblem、Final Fantasy Tactics 和 Disgaea 2 等流行游戏的游戏风格非常相似,所有单位都将被放置在一个代表他们位置的网格场上,也将被使用用于单位移动和攻击范围。
现在,鉴于该游戏将在很大程度上基于网格,我认为最好的方法是使用标准 System.Windows.Controls.Grid,并在 XAML 中根据需要定义尽可能多的行和列代码。
例子:
<Grid Background="{StaticResource WindowBackground}" x:Name="GridField" ShowGridLines="True" Width="1024" Height="768">
<Grid.RowDefinitions>
<RowDefinition Height="32"/>
<RowDefinition Height="32"/>
<RowDefinition Height="32"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="32"/>
<ColumnDefinition Width="32"/>
<ColumnDefinition Width="32"/>
</Grid.ColumnDefinitions>
此代码将创建并显示一个 3x3 网格,每个网格块的大小为 32x32。
现在,假设有一个完全开发的名为 Unit 的类,它将保存表示一个 Unit 的所有信息,包括它的 Name 和表示该单元的 Image。为了论证起见,假设单位的图像是正确的尺寸和格式,以便在分配给网格时正确显示。
对于我的团队当前的计划,我们打算在 C# 代码中以数组的形式表示当前在场上的所有单元。
例子:
public Unit[,] allUnits = new Unit[3,3];
其中 [3,3] 表示网格已定义的列数和行数。
现在,通常要将单个项目分配给网格,您必须明确定义项目位置,例如:
Grid.Row = "1" Grid.Column = "1" Source = "{Binding Unit.Picture}"
现在我知道这不是正确的语法,但我真的不关心这种方法,我的示例至少给出了如何处理它的想法。
所以这是我的问题:有没有办法直接将我的二维单位数组数据绑定到我的定义网格而不定义每个元素位置?例如:如果有一种方法可以将网格本身表示为一个数组,例如 GridField[1,2] 将表示 Grid.Row = "1" Grid.Column = "2" (
我不确定有没有办法做到这一点,所以这就是为什么我要问最好的方法。
总结:我想知道如何将我的网格直接绑定到我的二维单位数组,以便网格成为我数组中单位的可见表示。我想知道如何做到这一点,而不必明确定义每个网格块的内容以指向正确的数组位置。我不希望每个单元都定义它的位置,因为这是二维数组的目的,但如果它是不可避免的,那就这样吧。
我希望有一个可行的解决方案来解决这个问题,因为如果没有,下一步将涉及我创建自己的网格,这会很痛苦。
对于任何拼写错误和这个问题的长度,我深表歉意,但我想让自己尽可能清楚。
感谢您的宝贵时间和建议, 霜焰64
【问题讨论】:
标签: wpf image data-binding multidimensional-array grid