Windows phone 7 避免在屏幕转换期间多次按下按钮XNA WP7

Windows phone 7 避免在屏幕转换期间多次按下按钮XNA WP7,windows-phone-7,Windows Phone 7,我有两节课。屏幕和按钮 我的游戏的所有不同屏幕都继承了Screen类 然后将按钮添加到screen类中,并在screen的更新函数中更新(按钮的更新函数) 这是我的按钮更新的代码 foreach (TouchLocation touch in TouchPanel.GetState()) { if (touch.State == TouchLocationState.Pressed) { Point

我有两节课。屏幕和按钮

我的游戏的所有不同屏幕都继承了Screen类

然后将按钮添加到screen类中,并在screen的更新函数中更新(按钮的更新函数)

这是我的按钮更新的代码

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;
            }
        }
现在问题来了

  • 如果我守住电话线 如果(touch.State==TouchLocationState.Pressed) 然后,只能单击第一个按钮。我还尝试使用TryGetPreviousLocation(),这导致无法单击任何按钮

  • 如果我删除上面提到的If语句,那么代码适用于所有按钮,但在屏幕转换期间会出现多次按钮按下

  • 我想说的是。假设我有两个屏幕A和B。屏幕A和B在完全相同的位置上分别有两个按钮P和Q。在第二种情况下, 如果按下P按钮,则屏幕切换到B,同时按下按钮Q,而不抬起手指

    这种情况发生得非常快,因此人们无法控制它。我想知道我能做些什么,即使在屏幕转换期间也只允许按一次。如果不抬起手指并再次触摸屏幕,则播放器不能按下下一屏幕上的按钮


    就像前面提到的。我正在调用当前屏幕更新方法中所有按钮的更新方法。

    替换
    TouchLocationState。用
    TouchLocationState按下
    。移动
    。它对我有用

    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;
                }
            }
        }
    

    TouchLocationState.替换为
    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;
                }
            }
        }
    

    可能您可以尝试检测
    TouchLocationState.Released
    而不是
    TouchLocationState.Pressed
    ?可能您可以尝试检测
    TouchLocationState.Released
    而不是
    TouchLocationState.Pressed