wp7 xna touch。我希望用户继续点击,而不是保持

时间:2012-06-28 17:32:10

标签: windows-phone-7 xna touch

尝试制作一个xna游戏,用户需要点击该游戏才能停止一个栏。模拟就像我们在WWE PS3 / xbox游戏中看到的那样,放弃吧。

无论如何,我这样做的方式,是为了达到目的。但是,如果用户保持触摸,则触摸值会继续递增。

我想要的是,如果用户点击它,只会得1分。当他再次点击时,他将获得1分。目前正在发生的事情是,如果用户持有它,它会继续递增,类似于键盘(如果你按住按钮,按键继续按下)。

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

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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;
    }
}