0

私は2つのクラスを持っています。画面とボタン。

私のゲームのすべての異なる画面は、Screen クラスを継承します。

次に、ボタンが画面クラスに追加され、画面の更新関数で更新されます (ボタンの更新関数)。

これが私のボタンの更新のコードです。

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ステートメントを削除すると、コードはすべてのボタンで機能しますが、画面遷移中に複数のボタンが押されます。

私が言いたいのはこれです。2 つの画面 A と B があるとします。画面 A と B には、まったく同じ場所にそれぞれ 2 つのボタン P と Q があります。2番目のケースでは、Pボタンを押すと画面がBに遷移し、指を離さずにQボタンも押します。

これは非常に速く発生するため、制御することはできません。画面遷移中も1回しか押せないようにするにはどうしたらよいか教えてください。プレーヤーは、指を離して画面に再度触れない限り、次の画面でボタンを押すことができないようにする必要があります。

前述のとおりです。現在の画面の update メソッドで全ボタンの update メソッドを呼び出しています。

4

1 に答える 1

4

に置き換えTouchLocationState.pressedますTouchLocationState.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 に答える