C# 奇数物体运动
我有一个令人愉快的矩形,名为ship,我用左右箭头键控制它。当我第一次按下一个键时,船会朝相反的方向移动,第一次移动时它应该朝相反的方向移动,然后返回正确的方向。对于这个特殊的难题,什么是优雅的解决方案C# 奇数物体运动,c#,wpf,C#,Wpf,我有一个令人愉快的矩形,名为ship,我用左右箭头键控制它。当我第一次按下一个键时,船会朝相反的方向移动,第一次移动时它应该朝相反的方向移动,然后返回正确的方向。对于这个特殊的难题,什么是优雅的解决方案 public double p = 0; private void Window_KeyDown_1(object sender, KeyEventArgs e) { if (e.Key == Key.Right) { s
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;
}
设置边距后,您正在更改
p
的值。这意味着你实际上总是落后一键。我希望您在进行更改之前先进行设置。(请注意,我不确定设置边距是否真的是移动某些内容的理想方式…请考虑删除当前左侧边距的字段。您可以在更改前获得当前的发货保证金。也可拆分处理用户输入和船舶移动操作:
// 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
}
的确我不确定它是否“标准”,但更一般地说是
Canvas.SetLeft
等。请参阅更多用法。我想他是从Visual Studio中的WPF设计师那里得到这个想法的。它也能做到这一点。好吧,你们中有谁能推荐一种更好的方法吗?没关系,通过玩其他东西,我找到了一种很好的方法,我可以应用于此。