1

尝试制作一个 xna 游戏,用户需要点击以阻止酒吧下降。模拟就像我们在 WWE PS3/xbox 游戏中看到的一样,放弃栏。

无论如何,我这样做的方式,服务于目的。但是,如果用户保持触摸,触摸值会不断增加。

我想要的是,如果用户点击它,只会得到 1 分。而当他再次点击时,他会多获得1分。目前正在发生的事情是,如果用户按住它,它会不断增加,就像在键盘中一样(如果你按住一个按钮,按键会继续进行)。

            foreach (TouchLocation location in TouchPanel.GetState())
            {

                if (location.State == TouchLocationState.Moved)
                {
                    touchPoints++;
                    break;
                }
            }
4

2 回答 2

3

从 TouchLocationState.Moved 更改为 TouchLocationState.Pressed。这应该只发生在每次新的触摸中。

        foreach (TouchLocation location in TouchPanel.GetState())
        {
            TouchLocation prevLocation; 
            bool prevLocationAvailable = location.TryGetPreviousLocation(out prevLocation);

            if (location.State == TouchLocationState.Pressed && prevLocation.State != TouchLocationState.Pressed)
            {
                touchPoints++;
                break;
            }
        }

对于未来,如果您正在执行键盘输入,并且希望每次按下键盘都会增加值,但如果玩家按住空格则忽略,您只需要存储键盘的先前状态。然后,您比较当前键盘状态键是否被按下和之前的键盘状态键未被按下。

(实际上并没有在编译器中编码,因此下面可能存在一些代码问题)

KeyboardState currentKeyboardState = Keyboard.GetState();
if (currentKeyboardState.IsKeyDown(Keys.Space) && !previousKeyboardState.IsKeyDown(Keys.Space) {
    //Do whatever it is you want to do with the press of the space key
}
previousKeyboardState = currentKeyboardState;
于 2012-06-28T18:13:02.353 回答
0

这是我的代码片段,说明我如何让每次触摸都成为一个单独的值。system.diagnostics 行是在输出框中显示的测试。

TouchCollection touch = TouchPanel.GetState();

foreach (TouchLocation touchLocation in touch)
{
    if (touchLocation.State == TouchLocationState.Pressed)
    {
        base.InputPointX = touchLocation.Position.X;
        base.InputPointY = touchLocation.Position.Y;

        System.Diagnostics.Debug.WriteLine("X: " + base.InputPointX + \
            ", Y: " + base.InputPointY);
        base.Update();
        return true;
    }
}
于 2013-07-15T23:15:06.153 回答