0

マウス入力クラスを手に入れるためだけに、単純なクリックゲームを作成しています。

だから、私はボタンクラス(猫のランダムな絵です^^)とカウンタークラス(クリックした回数を数えます)があり、ゲーム自体は「クッキークリッカー」タイプのゲームになります。 D

しかし、変数は別のクラスから使用すると更新されません。パブリックであっても、ここに私のクラスがあります:

class catButton
{
    Texture2D buttonTexture;
    Vector2 buttonPosition;
    public Rectangle buttonRectangle;

    public MouseState currentMouseState;
    public MouseState previousMouseState;

    public void Initialize()
    {
        buttonPosition = new Vector2(150, 300);
    }

    public void LoadContent(ContentManager Content)
    {
        buttonTexture = Content.Load<Texture2D>("cat");
        buttonRectangle = new Rectangle((int)buttonPosition.X, (int)buttonPosition.Y, buttonTexture.Width, buttonTexture.Height);    
    }

    public void Update(GameTime gameTime)
    {
        previousMouseState = currentMouseState;
        currentMouseState = Mouse.GetState();  
    }

    public void Draw(SpriteBatch spriteBatch, GameTime gameTime)
    {
            spriteBatch.Draw(buttonTexture, buttonRectangle, Color.White);
    }      
}

そして私のカウンター:

class catCounter
{
    SpriteFont catfont;
    Vector2 counterPosition;

    catButton button = new catButton();


    public MouseState currentMouseState;
    public MouseState previousMouseState;

    KeyboardState keyState = Keyboard.GetState();

    public float amountOfCats = 0;

    public catCounter()
    {

    }

    public void LoadContent(ContentManager Content)
    {
        counterPosition = new Vector2(205, 155);
        catfont = Content.Load<SpriteFont>("counter");
    }

    public void Update(GameTime gameTime)
    {
        MouseState currentMouseState = Mouse.GetState();

        if (currentMouseState.LeftButton == ButtonState.Pressed && previousMouseState.LeftButton == ButtonState.Released && button.buttonRectangle.Contains(new Point(currentMouseState.X, currentMouseState.Y)))
        {
            amountOfCats++;
        }

        previousMouseState = currentMouseState;
    }

    public void Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.DrawString(catfont, "Cats: " + amountOfCats, counterPosition, Color.White);
    }
}

Game1.cs代わりにマウス クリックを行う必要がありますか?

申し訳ありませんが、これを書くのに時間がかかりました。何か知っている必要がある場合は教えてください!

前もって感謝します!

4

2 に答える 2

1

別のクラスから変数を使用すると、変数が更新されないのはなぜですか? この変数を誤って収集する方法に近づいている必要があります。

どの変数ですか?それを更新する必要があるが、意図したとおりに機能しない特定の呼び出しはどれですか?

catCounter最初にクラスを Game1.cs ファイル内のオブジェクトに初期化し、Game1.cs内の関連するメソッド内でこのオブジェクトに対しても呼び出しUpdate()て、コンポーネントを更新および描画すると仮定しますが、それが欠落している場合に備えて言及するだけですDraw().

Updateの方法はcatButton無駄であることに注意してください。その中の2行を削除するだけです。これらのマウスの状態をどこでも再利用しないため、まったく何もしません。また、更新では、そのスコープ内でローカル変数としてcatCounter再定義し、無価値で未使用にします。currentMouseStatepublic MouseState currentMouseState

いずれにせよ、XNA コンポーネントに関する注意事項がいくつかあります。クラスは現在、指定された XNA 構造に従っているため、クラスの継承を検討する必要がありDrawableGameComponentます。

class catCounter: DrawableGameComponent

あなたができること:

Components.Add(new catCounter());

これにより、Update()およびDraw()メソッドを手動で呼び出す必要がなくなりますが、それに固有のメソッド (例: 、 、 ) をオーバーライドする必要InitializeLoadContentありUpdateますDraw

申し訳ありませんが、どこに問題があるのか​​を教えていただけない場合、あなたの問題がどこにあるのかを理解することができません。

于 2013-10-17T22:49:50.973 に答える
0

clickedわかりました、それを行うより良い方法は、 という変数を作成して に設定することだと思いますFalse

それで:

    public void Update(GameTime gameTime)
    {
        MouseState currentMouseState = Mouse.GetState();

        if (currentMouseState.LeftButton == ButtonState.Pressed)
        {
            if (clicked == False && button.buttonRectangle.Contains(new Point(currentMouseState.X, currentMouseState.Y)))
            {
                amountOfCats++;
                clicked = True;
            }
        }
        else 
        {
            clicked = False
        }

        // Not needed - previousMouseState = currentMouseState;
    }

注意: clicked をbool変数にすることを忘れないでください。

このようにして、ユーザーがマウスを押したままにしないようにすることができ、2 番目のマウス状態変数に依存しません。

コードが機能しなかった理由は、Mouse.GetState()が自動的に更新されるためです。したがって、previousMouseState常に現在のマウスの状態になります。

これが役に立ったことを願っています。

モナ

于 2013-10-17T22:50:47.753 に答える