2014-11-07 2 views
0

Мой код дает мне значение NaN, когда я пытался проверить его возвращаемое значение. код здесь C#:Мяч внутри отверстия в кармане. WPF

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 или координаты отверстий, а затем проверить пересечение и сделать кодирование шариков, помещающих его в карман. Однако по моему коду, только он дал мне этот результат: NaN, NaN, 50,50, когда я попытался напечатать этот прямоугольник.

Еще одна вещь, если есть другой тип метода, где я могу выполнить эти цели, если мяч входит в отверстие в кармане. мяч исчезнет. Если вы считаете, что мне все еще нужно больше кода. Не стесняйтесь комментировать. Я открыт для предложений. Спасибо заранее и извините, если у меня есть грамматические ошибки.

+1

Что такое элемент 'top'? где вы определили/объявили его? похоже, что он не содержится внутри холста. –

+0

В отношении других типов методов вместо определения шаров с использованием фигур или других элементов управления вы можете использовать объекты «Путь», чье свойство «Геометрия» - «Эллиптическая геометрия». Геометрия позволит вам отображать на холсте на основе координат, поэтому вам больше не нужно иметь дело с 'Canvas.Top' и' Canvas.Left', даже если ваши шары «с холста» (что не должно происходить, Кстати). – heltonbiker

ответ

1

Вместо того, чтобы использовать Ellipse определить каждое отверстие, вы можете использовать Path с EllipseGeometry:

<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> 

Обратите внимание, что теперь это геометрии, которые называются, а не сам Paths. Таким образом, ваш код C# будет:

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

     Rect h1rect = top.Bounds; 
+0

Спасибо. работает. знак равно – Miguel

Смежные вопросы