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 に答える