WP7 XNA 触摸.我希望用户继续点击,而不是按住



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

无论如何,我这样做的方式是达到目的的。但是,如果用户按住触摸,触摸值将不断递增。

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

            foreach (TouchLocation location in TouchPanel.GetState())
            {
                if (location.State == TouchLocationState.Moved)
                {
                    touchPoints++;
                    break;
                }
            }
从 TouchLocationState

更改为 TouchLocationState.已移至 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;

这是我的代码片段,说明我如何将每次触摸都变成一个单独的值。系统诊断行是将在输出框中显示的测试。

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

最新更新