这是我的一些代码,每当它击中两侧时,它会将Play Field从左向右移动一个。
private void moveMonsterPlayField()
{
if (monsterPlayField.DirectionRight)
{
monsterPlayField.X++;
if (monsterPlayField.X + monsterPlayField.Width >= this.width)
{
monsterPlayField.DirectionRight = false;
monsterPlayField.Y++;
}
}
else
{
monsterPlayField.X--;
if (monsterPlayField.X == 0)
{
monsterPlayField.DirectionRight = true;
monsterPlayField.Y++;
}
}
}
但它有点冗长。
相反,我想做类似的事情:
private void moveMonsterPlayField()
{
monsterPlayField.X += monsterPlayField.DirectionRight * 1 //where DirectionRight resolves to 1 or -1
if (monsterPlayField.X + monsterPlayField.Width >= this.width || monsterPlayField.X == 0)
{
monsterPlayField.DirectionRight = !monsterPlayField.DirectionRight;
monsterPlayField.Y++;
}
}
可能吗?
答案 0 :(得分:4)
您可以使用以下内容:
monsterPlayField.X += monsterPlayField.DirectionRight ? 1 : -1;
实际上,这只是一个if
语句,结果为true
和false
。
其他选择:
bool
和int
,但我会远离个人。答案 1 :(得分:2)
另一种选择是使用枚举并为枚举成员分配值。
enum Direction
{
Right = 1,
Left = -1
}
然后,您可以将枚举转换为代码中的int值。
private void moveMonsterPlayField()
{
monsterPlayField.X += (int)monsterPlayField.Direction; // Direction is now of type Direction instead of bool
if (monsterPlayField.X + monsterPlayField.Width >= this.width || monsterPlayField.X == 0)
{
monsterPlayField.Direction = (Direction)((int)monsterPlayField.Direction * -1);
}
}
答案 2 :(得分:2)
您可能考虑的另一种选择是使用两个整数属性代替怪物的当前速度,指定X和Y分量:
int VelocityX;
int VelocityY;
目前您将值限制为-1,0和1(但您可以在将来指定更高的速度)。
然后你调整怪物(X,Y)位置的代码将是:
monsterPlayField.X += monsterPlayField.VelocityX;
monsterPlayField.Y += monsterPlayField.VelocityY;
更改后,您仍需要对X和Y值进行范围检查。