Странное движение объекта - PullRequest
0 голосов
/ 28 марта 2012

У меня есть восхитительный прямоугольник с именем ship, которым я управляю с помощью клавиш со стрелками вправо и влево. Когда я вначале нажимаю клавишу, корабль движется в противоположном направлении для первого движения, а затем возвращается в верное русло. Что было бы элегантным решением этой конкретной головоломки?

public double p = 0;

    private void Window_KeyDown_1(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Right)
        {
            ship.Margin = new Thickness(p, 259, 0, 12);
            p = p + 10;
        }

        if (e.Key == Key.Left)
        {
            ship.Margin = new Thickness(p, 259, 0, 12);
            p = p - 10;
        }

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Вы изменяете значение p после того, как вы установили маржу. Это означает, что вы фактически всегда на одно нажатие клавиши позади. Я ожидаю, что вы захотите установить его до того, как вы внесете изменения. (Я не уверен, что установка поля действительно - идеальный способ перемещения чего-либо, заметьте ...)

0 голосов
/ 28 марта 2012

Консир удаляет поле для текущего левого поля.Вы можете получить текущую маржу корабля, прежде чем изменить его.Также разделите обработку пользовательского ввода и операций по перемещению судна:

// Handle user input
private void Window_KeyDown_1(object sender, KeyEventArgs e)
{
    switch(e.Key)
    {
        case (Key.Right): 
              MoveShip(Direction.Right); return;
        case (Key.Left): 
              MoveShip(Direction.Left); return;
        default:
            return;
    }
}        

// Here you implement ship movement (Margin, Canvas.SetLeft, etc)
private void MoveShip(Direction direction)
{
    var margin = ship.Margin; // or create copy here
    const int distance = 10;

    switch(direction)
    {
       case(Direction.Left):
            margin.Left -= distance;
            break;
       case(Direction.Right):
            margin.Left += distance;
            break;
       default:
            return;
    }

    ship.Margin = margin;
}

private enum Direction
{
    Left,
    Right
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...