0

私は XNA の初心者で、問題に遭遇しました。ゲームの開始画面のボタンに使用しているボタン クラスがあります。マウスがボタンをクリックすると、ブール値の isClicked が true に設定され、ボタンで好きなことをできるようにしたいと考えています。ただし、ゲームをコンパイルすると、ボタンの四角形 (またはあるべき場所) を直接クリックすることはできず、ゲームを実行するたびに変化するその下または上をクリックする必要があるようです。

ボタンクラスのコードは次のとおりです。

class cButton
{
    Texture2D texture;
    public Vector2 position;
    public Rectangle rectangle;
    public Rectangle mouseRectangle;
    public Vector2 mousePosition;





    public cButton(Texture2D newTexture, Vector2 newPosition)
    {
        texture = newTexture;
        position = newPosition;






        rectangle = new Rectangle((int)position.X, (int)position.Y, texture.Width, texture.Height);
    }

    bool down;
    public bool isClicked;

    public void Update(MouseState mouse, GameTime gameTime)
    {




        mouseRectangle = new Rectangle(mouse.X, mouse.Y, 1, 1);
        mousePosition = new Vector2(mouse.X, mouse.Y);
        if (mouseRectangle.Intersects(rectangle))
        {    
            if (mouse.LeftButton == ButtonState.Pressed)// if mouse is on button
            {
                isClicked = true;
            }
            else 
            {                   
                isClicked = false;
            }
        }
    }

    public void Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.Draw(texture, position, color);
    }
}

}

そして、そのボタンを描画するためのゲーム 1 クラスのこのコード:

        protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.Black);

        switch (CurrentGameState)
        {
            case GameState.MainMenu:
                spriteBatch.Begin();
                spriteBatch.Draw(Content.Load<Texture2D>("Backgrounds/title"), new Rectangle(0, 0, screenWidth, screenHeight), Color.White);
                btnPlay.Draw(spriteBatch);


                spriteBatch.End(); 
                break;


        }
        base.Draw(gameTime);
    }

設定した画面解像度と関係があるのではないかと考えていました。そのためのコードは次のとおりです。

    //Screen Adjustments
    public int screenWidth = 1280, screenHeight = 720; 

        graphics.PreferredBackBufferWidth = screenWidth;
        graphics.PreferredBackBufferHeight = screenHeight;

助けてください、私は何が間違っていたのかわかりません。

4

1 に答える 1

1

この質問はあなたの助けになるはずです。:)

基本的に、ポイント構造体を作成し、ボタンの四角形で、Contains メソッドを呼び出します。クリックがボタン上にあるかどうかがわかります。

于 2013-03-25T01:02:33.840 に答える