我正在做一个简单的游戏,一个砖/块破坏者游戏。我在屏幕上绘制了正确需要它们的块。然而,我想找到一种方法来使用用户定义的委托和自定义事件来使用Rectangle.IntersectsWith()方法检测一个Rectangle(球)与另一个Rectangle(一个块)之间的冲突。我希望受影响的块报告事件,所以我可以让它消失。
为了生成我的块,我使用一组WPF XAML代码,在Canvas(游戏板)中创建一个包含Rectangle的ItemsControl元素。在我的代码后面,我将ItemsControl ItemsSource绑定到泛型类型Block类的列表。这个Block类非常简单,它只是一个布尔值。如果块为true,则绑定块将使ItemsControl触发器启用Rectangle。
球是Canvas中定义的WPF中的Rectangle元素。所以,我可以在这里提供任何必要的代码,但是首先,我发布了我觉得相关的内容,以便开始思考......
实现此目的的任何提示,建议或想法?
C#:MainWindow.xaml.cs
private void BindBlocks()
{
Blocks = new List<Block>();
for (var c = 0; c < 8; c++)
{
for (var r = 0; r < 4; r++)
{
Blocks.Add(new Block(true));
}
}
ItemsControl_BlockBinding.ItemsSource = Blocks;
}
WPF:MainWindow.xaml
<!--BLOCKS-->
<ItemsControl x:Name="ItemsControl_BlockBinding" Canvas.Top="16" Canvas.Left="17">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid x:Name="Grid_BlockField" Height="370" Width="730" Columns="8" ClipToBounds="True">
<UniformGrid.Effect>
<DropShadowEffect Direction="270" Opacity="0.8" ShadowDepth="1" BlurRadius="8"/>
</UniformGrid.Effect>
</UniformGrid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Rectangle x:Name="Rectangle_Block" IsEnabled="{Binding (local:Block.BlockState)}" Fill="AliceBlue" Height="auto" Width="auto" Margin="3,3,3,3"/>
<DataTemplate.Triggers>
<Trigger Property="IsEnabled" Value="True">
<Setter Property="Visibility" Value="Visible" TargetName="Rectangle_Block"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Visibility" Value="Hidden" TargetName="Rectangle_Block"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>