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