0

私はクリックイベントを処理していますが、更新と描画の処理が非常に高速であることを気にしません。そのため、クリックを処理するために単純なボタン押下イベントを使用しています。しかし、他のプログラマーと同じように、この種のアプローチを使用しているときに問題が発生しました。ご想像のとおり、スコアの追加は非常に高速です。クリックするだけで、スコア+=100のようなスコアを追加できます。スコアは200-400を追加しました。これが私のやり方です。

mouseStateCurrent = Mouse.GetState();
                mousePosition = new Point(mouseStateCurrent.X, mouseStateCurrent.Y);
                if (drawPauseMenu == false)
                {
                    if (pauseBtnRec.Contains(mousePosition))
                    {
                        if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
                        {
                            drawPauseMenu = true;
                            paused = true;
                        }
                    }
                    else if (binRec.Contains(mousePosition))
                    {
                        if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
                        {
                            playerScore += 100;
                            binSelected = 1;
                        }

                    }
                    else if (birdBathRec.Contains(mousePosition))
                    {
                        if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
                        {
                            playerScore += 100;
                            birdBathSelected = 1;
                        }

                    }
                    else if (bowlRec.Contains(mousePosition))
                    {
                        if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
                        {
                            playerScore += 100;
                            bowlSelected = 1;
                        }

                    }
                    else if (cansRec.Contains(mousePosition))
                    {
                        if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
                        {
                            playerScore += 100;
                            cansSelected = 1;
                        }

                    }
                    else if (paintsRec.Contains(mousePosition))
                    {
                        if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
                        {
                            playerScore += 100;
                            paintsSelected = 1;
                        }

                    }
                    else if (poolRec.Contains(mousePosition))
                    {
                        if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
                        {
                            playerScore += 100;
                            poolSelected = 1;
                        }

                    }
                    else if (pothRec.Contains(mousePosition))
                    {
                        if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
                        {
                            playerScore += 100;
                            potSelected = 1;
                        }

                    }
                    else if (tiresRec.Contains(mousePosition))
                    {
                        if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
                        {
                            playerScore += 100;
                            tiresSelected = 1;

                        }

                    }
                    else if (vasesRec.Contains(mousePosition))
                    {
                        if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
                        {
                            playerScore += 100;
                            vasesSelected = 1;
                        }

                    }
                    mouseStatePrevious = mouseStateCurrent;
                }

このコードで遊んでみて、このようにしてみました、

if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
{

    if (mouseStateCurrent.LeftButton == ButtonState.Released)
    {
        playerScore += 100;
        vasesSelected = 1;
    }
}

これではまだ運がありません。何か案は?ありがとう!

4

1 に答える 1

1

もうすぐです。あなたはそれを持ってmouseStatePreviousいて、それを正しく設定していますが、あなたはそれを決して使用していません。

それ以外の:

if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
{ // Why are you checking if the mouse is pressed AND released?
    if (mouseStateCurrent.LeftButton == ButtonState.Released)
    {
        playerScore += 100;
        vasesSelected = 1;
    }
}

これを行う:

if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
{
    if (mouseStatePrevious.LeftButton == ButtonState.Released)
    {
        playerScore += 100;
        vasesSelected = 1;
    }
}
于 2013-03-07T14:23:23.490 に答える