how do i make objects chase anothe object (UWP ,C#)

Viewed 49

i manged to make first object to move with the buttons , and now i try to make the other object to chase him constantly. Any Ideas????

private void PlayerMovement(CoreWindow sender, KeyEventArgs args) { VirtualKey movement = args.VirtualKey;

        switch (movement)

        {

            case VirtualKey.Up:
                Canvas.SetTop(Player, Canvas.GetTop(Player) - 10);
                break;

            case VirtualKey.Down:
                Canvas.SetTop(Player, Canvas.GetTop(Player) + 10);
                break;

            case VirtualKey.Left:
                Canvas.SetLeft(Player, Canvas.GetLeft(Player) - 10);
                break;

            case VirtualKey.Right:
                Canvas.SetLeft(Player, Canvas.GetLeft(Player) + 10);
                break;
        }

    }
1 Answers

how do i make objects chase anothe object (UWP ,C#)

The better way is make timer to move enemy to player step by step. We could get enemy and player postion. and measure the distance between them. Then call set left-top method base on the distance. And stop moving when enemy and player cross.

for example

var timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += Timer_Tick;
timer.Start();

private void Timer_Tick(object sender, object e)
{
    Chase(enemyList[0]);
}

private void Chase(FrameworkElement enemy)
{
    var enemyLeft = Canvas.GetLeft(enemy);
    var enemyTop = Canvas.GetTop(enemy);
 
    var playerLeft = Canvas.GetLeft(Player);
    var playerTop = Canvas.GetTop(Player);
  
    var distance = new Point(playerLeft - enemyLeft, playerTop - enemyTop);

    if (distance.X == 0 && distance.Y == 0 || !DetectCollisions(Player,enemy).IsEmpty) return;

    if (distance.X > 0 && distance.Y > 0)
    {
        //down-right
        Canvas.SetTop(enemy, Canvas.GetTop(enemy) + 10);
        Canvas.SetLeft(enemy, Canvas.GetLeft(enemy) + 10);

    }
    else if (distance.X < 0 && distance.Y < 0)
    {
        //up-left
        Canvas.SetTop(enemy, Canvas.GetTop(enemy) - 10);
        Canvas.SetLeft(enemy, Canvas.GetLeft(enemy) - 10);
    }
    else if (distance.X > 0 && distance.Y < 0)
    {
        Canvas.SetTop(enemy, Canvas.GetTop(enemy) - 10);
        Canvas.SetLeft(enemy, Canvas.GetLeft(enemy) + 10);
        //up-right

    }
    else if (distance.X < 0 && distance.Y > 0)
    {
        Canvas.SetTop(enemy, Canvas.GetTop(enemy) + 10);
        Canvas.SetLeft(enemy, Canvas.GetLeft(enemy) - 10);
        //down-left
    }
    
}
Related