2011-04-30 3 views
1
<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

코드를 게시하지 않은 DetectCollisionLeft의 버그와 비슷합니다. –

+0

죄송합니다. 지금 업데이트하십시오. – Lokie

+0

제목에 "C# XAML"을 넣을 필요가 없습니다. 태그에 그대로 두십시오. –

답변

0

myZero을 캔버스에서 제거한 후에 다른 이유가있을 것이라고 생각하십니까? 충돌 감지 방법은 myZero의 경계 상자 (컬렉션에서 제거했기 때문에 변경되지 않는 속성)를 결정하는 속성을 읽고 myCat의 경계 상자와 비교하여 교차하는지 여부를 결정합니다. myZero이 여전히 LayoutRoot.Children 컬렉션에 있는지 여부에 따라 DetectCollisionZero의 내용이 다르게 동작합니다.

뭔가 다른 작업을 수행하려는 경우 관심있는 상태를 확인하는 코드를 작성해야합니다 (myZero은 게임 보드의 일부로 더 이상 존재하지 않아야 함). 적절히 반응합니다 (충돌을 확인할 때 더 이상 true을 반환하지 않음).