我有两节课。屏幕和按钮。
我游戏的所有不同屏幕都继承了Screen类。
然后将按钮添加到屏幕类并在屏幕的更新功能中更新(按钮的更新功能)。
以下是我的Button更新的代码。
foreach (TouchLocation touch in TouchPanel.GetState())
{
if (touch.State == TouchLocationState.Pressed)
{
Point point = new Point((int)touch.Position.X, (int)touch.Position.Y);
if (rectangle.Contains(point))
{
pressed = true;
color = Color.Red;
}
else
{
pressed = false;
color = Color.White;
}
break;
}
}
现在问题就在于此。
如果我保持这条线 if(touch.State == TouchLocationState.Pressed) 然后只能点击第一个按钮。我也尝试使用TryGetPreviousLocation(),这样就不会点击任何按钮。
如果我删除上面提到的if语句,那么代码适用于所有按钮,但在屏幕转换期间会出现多个按钮按下。
我的意思是这个。假设我有两个屏幕A和B.屏幕A和B分别在完全相同的位置有两个按钮P和Q.在第二种情况下, 如果按下P按钮,屏幕将转换为B,同时按下按钮Q,而手指不会被抬起。
这种情况发生得非常快,因此无法控制它。我想知道即使在屏幕转换过程中我只能进行一次按键操作。玩家不应该在不抬起手指并再次触摸屏幕的情况下按下下一个屏幕上的按钮。
如前所述。我正在调用当前屏幕更新方法中所有按钮的更新方法。
答案 0 :(得分:4)
将TouchLocationState.pressed
替换为TouchLocationState.Moved
。它对我有用。
foreach (TouchLocation touch in touches)
{
if (touch.State == TouchLocationState.Moved)
{
if (leftRectangle.Contains((int)touch.Position.X, (int)touch.Position.Y))
{
spriteMove.X -= 5;
}
if (upRectangle.Contains((int)touch.Position.X, (int)touch.Position.Y))
{
spriteMove.Y -= 5;
}
if (rightRectangle.Contains((int)touch.Position.X, (int)touch.Position.Y))
{
spriteMove.X += 5;
}
if (downRectangle.Contains((int)touch.Position.X, (int)touch.Position.Y))
{
spriteMove.Y += 5;
}
}
}