C # UWP изменяет изображение только один раз с помощью KeyDown

#c# #xaml #uwp #keydown

#c# #xaml #uwp #keydown

Вопрос:

Я создаю глупую игру для школьного проекта, и всякий раз, когда игрок перемещается вправо или влево, изображение меняется в соответствии с направлением. Проблема в том, что изображение мигает, очевидно, потому что оно постоянно меняется для одного и того же изображения при нажатии. Я считаю, что мне нужно было бы изменить изображение только при первом нажатии, но я понятия не имею, как это сделать. Любая помощь? TIA

Вот метод, который я использую для KeyDown:

 private void MoveLeft(Image playerToMove)
    {
        double left = Canvas.GetLeft(playerToMove);
        left -= _step;
        playerToMove.Source = new BitmapImage(new Uri("ms-appx:///Assets/Characters/ShepherdLeft.png"));
        Canvas.SetLeft(playerToMove, left);
    }
  

Ответ №1:

Вам просто нужно запомнить, в каком направлении ранее перемещался проигрыватель. Вот некоторый псевдокод, который поможет с этим:

 private enum Direction 
{
   Right,
   Left,
   Unknown
}

private Direction lastDirection = Direction.Unknown;

private void MoveLeft(Image playerToMove)
{
  if (lastDirection != Direction.Left)
  {
     playerToMove.Source = "ShepherdLeft.png";
  }
  lastDirection = Direction.Left;
}

private void MoveRight(Image playerToMove)
{
  if (lastDirection != Direction.Right)
  {
     playerToMove.Source = "ShepherdRight.png";
  }
  lastDirection = Direction.Right;
}
  

Комментарии:

1. В итоге я создал основной класс для проигрывателя с 2 классами с указаниями и изменил видимость 🙂 Но ваш способ проще 🙂 ty double left = Холст. getLeft (перемещение игрока. PlayerLeftAvatar()); playerToMove. PlayerLeftAvatar().Видимость = Видимость. Свернуто; playerToMove. PlayerRightAvatar().Видимость = Visibility.Visible; слева = _step; Холст. SetLeft (игрок перемещается. PlayerLeftAvatar(), слева); Холст. SetLeft (игрок перемещается. PlayerRightAvatar(), слева);