奇怪的物体运动

时间:2012-03-28 10:45:26

标签: c# wpf

我有一个令人愉快的名为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 个答案:

答案 0 :(得分:2)

在设置保证金后,您正在更改p 的值。这意味着你实际上总是有一个关键的压力。我希望您在之前设置进行更改。 (我不确定设置边距真的是理想的移动方式,请注意......)

答案 1 :(得分:0)

Consier删除当前左边距的字段。您可以在更改之前获得当前的船舶保证金。还拆分处理用户输入和船舶移动操作:

// 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
}