球在口袋里.WPF

本文关键字:WPF 口袋 | 更新日期: 2023-09-27 18:29:27

当我尝试测试它的返回值时,我的代码给了我一个NaN值。代码在这里C#:

var hx1 = Canvas.GetLeft(top);
var hy1 = Canvas.GetTop(top);
Rect h1 = new Rect(hx1, hy1, top.ActualWidth, top.ActualHeight);
Console.WriteLine(h1);

XAML

<Canvas Canvas.Left="134" Canvas.Top="98" Height="500" Width="1010">
        <Ellipse Height="50" Name="top" Stroke="Black" Width="50" Margin="481,4,479,446" />
        <Ellipse Height="50" Margin="30,21,930,429" Name="topLeft" Stroke="Black" Width="50" />
        <Ellipse Height="50" Margin="30,430,930,20" Name="botLeft" Stroke="Black" Width="50" />
        <Ellipse Height="50" Margin="481,444,479,6" Name="bot" Stroke="Black" Width="50" />
        <Ellipse Height="50" Margin="930,430,30,20" Name="botRight" Stroke="Black" Width="50" />
        <Ellipse Height="50" Margin="930,21,30,429" Name="topRight" Stroke="Black" Width="50" />
    <Grid Canvas.Left="0" Canvas.Top="0" Height="500" Width="1010">
        <!--<Canvas Height="500" Width="1010" Name="PoolCanvas">-->
        <ContentControl x:Name="poolContainer">
        </ContentControl>
        <!--</Canvas>-->
    </Grid>
</Canvas> 

首先,我正在尝试使用WPF制作一个台球游戏。现在我正试着做一个"口袋洞",让球进入水池。有人告诉我,要先检索孔x和y或孔的坐标,然后检查相交处,并对放入口袋的球进行编码。然而,在我的代码中,它只提供了以下输出:不,不,50,50当我试着打印那个矩形的时候。

还有一件事,如果有另一种方法,我可以实现这些目标,如果球进入口袋洞。球将消失。如果你认为我还需要提供更多的代码。欢迎发表评论。我愿意接受建议。提前谢谢你,如果我有语法错误,我很抱歉。

球在口袋里.WPF

您可以将PathEllipseGeometry:一起使用,而不是使用Ellipse来定义每个孔

    <Canvas>
        <Path Stroke="Black">
            <Path.Data>
                <EllipseGeometry x:Name="topLeft" Center="50,50" RadiusX="25" RadiusY="25"/>
            </Path.Data>
        </Path>
        <Path Stroke="Black">
            <Path.Data>
                <EllipseGeometry x:Name="top" Center="500,50" RadiusX="25" RadiusY="25"/>
            </Path.Data>
        </Path>
        <!-- More Paths, one for each hole -->
    </Canvas>

请注意,现在命名的是几何图形,而不是路径本身。所以你的C#代码应该是:

        var hx1 = top.Center.X;
        var hy1 = top.Center.Y;
        var h1 = top.Center; // of type System.Windows.Point;
        Rect h1rect = top.Bounds;