0

我有两节课。屏幕和按钮。

我游戏的所有不同屏幕都继承了 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;
            }
        }

现在问题来了。

  1. 如果我保留这条线 if (touch.State == TouchLocationState.Pressed) 则只能单击第一个按钮。我还尝试使用 TryGetPreviousLocation() 导致无法单击任何按钮。

  2. 如果我删除上面提到的 if 语句,那么代码适用于所有按钮,但在屏幕转换期间会发生多次按钮按下。

我想说的是这个。假设我有两个屏幕 A 和 B。屏幕 A 和 B 在完全相同的位置分别有两个按钮 P 和 Q。在第二种情况下,如果按下 P 按钮,则屏幕转换到 B,并且在没有抬起手指的情况下也按下按钮 Q。

这发生得非常快,因此无法控制。我想知道即使在屏幕转换期间我能做些什么来只允许按一次。如果不抬起手指并再次触摸屏幕,玩家应该无法按下下一个屏幕上的按钮。

如前所述。我正在调用当前屏幕更新方法中所有按钮的更新方法。

4

1 回答 1

4

替换TouchLocationState.pressedTouchLocationState.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;
            }
        }
    }
于 2012-11-26T13:58:41.753 回答