Обнаружение столкновений для добавления +1 один раз, а не несколько раз, когда объект сталкивается - PullRequest
1 голос
/ 30 апреля 2011
<UserControl x:Class="CatGame.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="480" d:DesignWidth="640"  KeyDown="UserControl_KeyDown">
    <Canvas x:Name="LayoutRoot" Background="white">
    <Image Source="level1.jpg"></Image>
    <TextBlock FontSize="24" Canvas.Left="700" Canvas.Top="90" Name="score">/TextBlock>        
    </Canvas>
</UserControl>



if (DetectCollisionZero(myCat, myZero))
          {
           int scoreAsInt;
           if (Int32.TryParse(score.Text, out scoreAsInt) != null)
               {
                   scoreAsInt = scoreAsInt + 1;
                   score.Text = scoreAsInt.ToString();
               }
               LayoutRoot.Children.Remove(myZero);
             }

     public bool DetectCollisionZero(ContentControl myCat, ContentControl myZero)
             {

                 Rect myCatRect = new Rect(
                         new Point(Convert.ToDouble(myCat.GetValue(Canvas.LeftProperty)),
                                              Convert.ToDouble(myCat.GetValue(Canvas.TopProperty))),
                                      new Point((Convert.ToDouble(myCat.GetValue(Canvas.LeftProperty)) + myCat.ActualWidth),
                                              (Convert.ToDouble(myCat.GetValue(Canvas.TopProperty)) + myCat.ActualHeight))
                              );

                 Rect myZeroRect = new Rect(
             new Point(Convert.ToDouble(myZero.GetValue(Canvas.LeftProperty)),
                                             Convert.ToDouble(myZero.GetValue(Canvas.TopProperty))),
                                     new Point((Convert.ToDouble(myZero.GetValue(Canvas.LeftProperty)) + myZero.ActualWidth),
                                             (Convert.ToDouble(myZero.GetValue(Canvas.TopProperty)) + myZero.ActualHeight))
                             );

                 myCatRect.Intersect(myZeroRect);
                 return !(myCatRect == Rect.Empty);
             }

У меня в основном кошка, сталкивающаяся с объектом (myZero), и когда это происходит, мой счет должен добавить +1 к таким видам работ, однако, как только (myZero) будет удален, пользователь все равно сможет пройти по месту, где был объект, и получить больше очков.

Как я могу сделать так, чтобы только 1 балл был когда-либо добавлен.

1 Ответ

0 голосов
/ 01 мая 2011

Почему вы ожидаете, что это изменится после удаления myZero с холста? Ваш метод обнаружения столкновений просто считывает свойства, которые определяют ограничивающий прямоугольник myZero (свойства, которые не изменятся только потому, что вы удалили его из коллекции), сравнивает это с ограничивающим прямоугольником myCat и решает, будут ли они пересекаются. Ничто в DetectCollisionZero не будет вести себя иначе, в зависимости от того, находится ли myZero в коллекции LayoutRoot.Children.

Если вы хотите, чтобы он делал что-то другое, вам нужно написать код, который проверяет состояние, которое вас интересует (myZero больше не должен присутствовать как часть игрового поля) и реагирует соответствующим образом (больше не возвращает true при проверке столкновений).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...