Помогите найти в чем проблема при перетаскивании объекта мышкой по Canvas С# WPF
Всем здравствуйте! В общем я начал изучать С# по книге HeadFirst, и там в первой главе нужно сделать игру в WPF. Если коротко, то на Canvas в случайном месте появляется два объекта - человек и портал. Так же там каждые 2 секунды появляются анимированные враги. Суть игры перетащить(мышкой) в портал как можно больше людей не прикасаясь к врагам. Код который в книге у меня работает оооочень криво, книга старая. Попытался сделать по своему. Игра работает, но когда я зажимаю ЛКМ и захватываю человечка, то он проходит сквозь врагов и реагирует на них только если я отожму кнопку прямо под врагом. Нужно чтобы если человек захвачен мышкой и попал на врага вызвался метод EndTheGame().
Помогите исправить пожалуйста. Заранее спасибо)
private void enemy_MouseEnter(object sender, MouseEventArgs e)
{
if (humanCaptured && Mouse.Capture(human))
EndTheGame();
}
private void human_MouseDown(object sender, MouseButtonEventArgs e)
{
if (enemyTimer.IsEnabled)
{
relativePosition = e.GetPosition(human) - new Point();
humanCaptured = true;
human.IsHitTestVisible = false;
Mouse.Capture(human);
}
}
private void target_MouseEnter(object sender, MouseEventArgs e)
{
if (targetTimer.IsEnabled && humanCaptured)
{
progressBar.Value = 0;
scoreAmount++;
score.Text = "Score: " + scoreAmount;
Canvas.SetLeft(target, random.Next(100, (int)playArea.ActualWidth - 100));
Canvas.SetTop(target, random.Next(100, (int)playArea.ActualHeight - 100));
Canvas.SetLeft(human, random.Next(100, (int)playArea.ActualWidth - 100));
Canvas.SetLeft(human, random.Next(100, (int)playArea.ActualWidth - 100));
humanCaptured = false;
human.IsHitTestVisible = true;
}
}
private void human_MouseMove(object sender, MouseEventArgs e)
{
if (humanCaptured)
{
var point = e.GetPosition(playArea);
var newPos = point - relativePosition;
Canvas.SetLeft(human, newPos.X);
Canvas.SetTop(human, newPos.Y);
}
}
private void human_MouseUp(object sender, MouseButtonEventArgs e)
{
Mouse.Capture(null);
humanCaptured = false;
human.IsHitTestVisible = true;
}