我尝试缩短我的if语句。我完成了1个,但看不到如何缩短另一个1并清理它。我以1为例进行了简化,希望可以得到一些帮助:D。
我解决了这个问题1。
if (_clickDestination.Y < Position.Y &&
_clickDestination.Y != Position.Y && Position.X >= _clickWalkStairsX)
{
Position.Y -= (int)StairSpeed; // moves the person up on the stairs.
}
else if (_clickDestination.Y != Position.Y && Position.X >= _clickWalkStairsX)
{
Position.Y += (int)StairSpeed; // moves the person down on the stairs
}
对此:
if (_clickDestination.Y != Position.Y && Position.X >= _clickWalkStairsX)
{
if (_clickDestination.Y < Position.Y)
{
Position.Y -= (int)StairSpeed; // moves the person up on the stairs.
}
else
{
Position.Y += (int)StairSpeed; // moves the person down on the stairs
}
}
现在我正像上面一样尝试修复此1。
else if (
(_clickDestination.Y == Position.Y &&
_clickDestination.X > Position.X) ||
(_clickDestination.Y != Position.Y &&
_clickWalkStairsX != Position.X)
)
{
Position.X += (int)Speed; // moves the person to the right
}
else if (_clickDestination.Y != Position.Y ||
_clickDestination.X < Position.X)
{
Position.X -= (int)Speed; // moves the person to the left
}
我希望有人能真正看到需要解决的问题,并会非常感激。否则所有其他人都会互相支持。
答案 0 :(得分:0)
如果要完全更改,我将其更改为此。 第一个条件处理Y比较,第二个条件处理X比较:
int speedChange = 0;
//...
else if (_clickDestination.Y == Position.Y)
speedChange = _clickDestionation.X.CompareTo(Position.X) * (int)Speed;
else
{
if (_clickWalkStairsX != Position.X)
speedChange = (int)Speed;
else if (_clickDestination.X < Position.X)
speedChange = -(int)Speed;
}
此外,对于以前的条件,您可以将其缩短为:
if (_clickDestination.Y != Position.Y && Position.X >= _clickWalkStairsX{
Position.Y += _clickDestination.Y.CompareTo(Position.Y) * (int)StairSpeed;