2013-12-15 3 views
0

방금 ​​Head First C# 3 판이 있습니다. 책의 첫 번째 부분에서는 "인간"을 클릭하고 드래그하는 동안 피할 수있는 튀어 오르는 원을 만드는 간단한 게임을 만들기 시작합니다. 코딩에는 그래픽 측면의 XAML과 C#이 포함됩니다. 한 가지는 제외하고 모두 작동합니다. 마우스를 클릭하면 "인간"을 클릭하고 드래그하는 대신 커서를 따라 "따라 가며"게임 자체가 마치 커서 인 인간처럼 동작하므로 튀어 오르는 원 중 하나를 치면 게임 오버가 발생합니다. 내가 뭘 잘못하고 있는지 알 수 없다. 책 옆에 줄 단위로 코드를 살펴 봤습니다. 알아낼 수있는 유일한 방법은이 코드 블록입니다.게임 예제에서 예기치 않은 동작이 발생했습니다.

private void playArea_PointerMoved(object sender, PointerRoutedEventArgs e) 
{ 
    if (humanCaptured) 
    { 
     Point pointerPosition = e.GetCurrentPoint(null).Position; 
     Point relativePosition = grid.TransformToVisual(playArea).TransformPoint(pointerPosition); 
     if ((Math.Abs(relativePosition.X - Canvas.GetLeft(human)) > human.ActualWidth * 20) 
      || (Math.Abs(relativePosition.Y - Canvas.GetTop(human)) > human.ActualHeight * 20)) 
     { 
      humanCaptured = false; 
      human.IsHitTestVisible = true; 
     } 
     else 
     { 
      Canvas.SetLeft(human, relativePosition.X - human.ActualWidth/2); 
      Canvas.SetTop(human, relativePosition.Y - human.ActualHeight/2); 
     } 
    } 
} 

이 책은 3으로 인간의 실제 폭과 높이를 넣어라고하지만 그렇게 실제 게임에서 사람을 클릭하려고하면 심지어 전혀 커서를 등록하지 않습니다. 하지만 20 이상으로 놓으면 앞에서 말했듯이 인간의 커서를 따라 움직이면 나머지 게임은 정상적으로 작동합니다.

커서가 사람을 "클릭"하고 "끌"수있게하는 코드입니다. 다른

<StackPanel x:Name="human" Orientation="Vertical" Canvas.Left="17" Canvas.Top="15" 
        PointerPressed="human_PointerPressed" > 
      <Ellipse Fill="White" Height="10" Stroke="White" Width="10"/> 
      <Rectangle Fill="White" Height="25" Stroke="White" Width="10" /> 
     </StackPanel> 

모두가 보인다

private void human_PointerPressed(object sender, PointerRoutedEventArgs e) 
{ 
    if (enemyTimer.IsEnabled) 
    { 
     humanCaptured = true; 
     human.IsHitTestVisible = false; 
    } 
} 

그리고 여기이은 (는) 주변 내 커서를 따라하고있다 대신 클릭 및 드래그 만드는 작업 만하도록되어 관련 XAML 코드 일하는 것이 옳다. 책의 코드를 반복해서 확인하고 사이트로갔습니다. 내가 한 모든 것은 내가 말할 수있는 한 다를 뿐이다. 누구든지 도움을받을 수 있다면 크게 감사하겠습니다.

+0

때 정확히 가만히 있으면 포인터 (마우스)를 입력 할 경우 triggert을 얻을 것이다 StackPanel.PointerPressed가 트리거를 받습니까? – WiiMaxx

+0

실제로 "인간"을 클릭하면 실행됩니다. 어떤 트리거를 실행하지만 "인간"개체가 커서 오른쪽으로 자동 이동하고 주위를 따라갑니다 ... "원수"또는 "원"이 여전히 커서를 치는 경우 게임을 시작합니다. 실제 인간의 물체는 그것과 상호 작용하기로되어있다. – Orex

+0

그리고 추가하십시오. 그것은 내가 클릭하고 누른 상태에서 "드래그"하는 것으로되어 있습니다. 그것은 자동 따르지 않습니다. 그리고 코드에서 뭘하는지 알지 못합니다. 그리고이 책은 저에게이 방식으로 타이핑을 해주었습니다. 그래서이 책에 새롭기 때문에 나는 그들이 책에 넣은 고의적 인 문제가 아니기 때문에 무엇을 찾아야할지 모릅니다. – Orex

답변

0

책을 읽은 후 "Head First C#, 3rd Edition"

나는 문제가 당신의 코드가 아닙니다 말할 것 ...

그가 여부를 확인하지 않기 때문에 그것은, 인간이 캡처받을 경우 그가 감지 방법에 대한 더 "human"는 "enemy"충돌 그는 단지 한 일부 Pointerevent의에 "enemy"이 아니라 당신의 "human은"... 그와 함께 충돌

+0

커서가 커서를 실제 타겟으로 인식하고 있음을 이해합니다. 문제는 내가 사람의 물건을 클릭했을 때 일어난다. 그러나 그 물건 자체가 나의 커서를 따라 간다. 그 다음 게임은 나의 커서를 원이나 사람과 충돌 할 때 "인간의"물건으로 인식한다. 게임 오버가 발생합니다. – Orex

+0

커서가 인간으로 인식되지 않습니다. 커서가 적의 적과 충돌 (입력) 된 경우 문제가됩니다. 포인터가 트리거되면 ... 적입니다. 포인터 입력 == "커서"가 "적"과 충돌하고 원하는대로가 아닙니다. "인간"이 "적"과 충돌합니다. – WiiMaxx

+0

좋습니다. "인간"물체가 왜 나를 끌 수있는 대신 커서를 따라 다니는 것일까? 아니면 별개이지만 관련 문제입니까? – Orex

관련 문제