1

マウスの位置を取得して描画するための簡単なコードを次に示します。

    class Pointer
{
    MouseState currPointerState;
    Vector2 currPointerPos;


    public Pointer()
    {
    }

    public void Update()
    {
        currPointerState = Mouse.GetState();
        currPointerPos.X = currPointerState.X;
        currPointerPos.Y = currPointerState.Y;
    }

    public void Draw(SpriteBatch spriteBatch, Texture2D pointerTexture)
    {
        spriteBatch.Draw(pointerTexture, currPointerPos, Color.White);
    }

}

次に、メインのゲームファイルで:

        protected override void Update(GameTime gameTime)
    {
        pointer.Update();
        base.Update(gameTime);
    }

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

        spriteBatch.Begin();

        pointer.Draw(spriteBatch, pointerTexture);
        menuManager.Draw(spriteBatch, menu_bar);

        spriteBatch.End();
        base.Draw(gameTime);
    }

ゲームは今のところウィンドウで実行されますが、マウスは実際のマウス位置よりも約 500 ピクセル右にあり、100 ピクセル下にあります。

これは、次のコードを追加した後に発生しました: (メニュー描画クラス)

    enum MenuState
{
    mainMenu,
    playing,
    options
};

class MenuManager : Game1
{
    MenuState menuState = MenuState.mainMenu;
    Vector2 button1 = Vector2.Zero;


    public void Draw(SpriteBatch spriteBatch, Texture2D menuBar)
    {
        switch (menuState)
        {
            case MenuState.mainMenu:
                spriteBatch.Draw(menuBar, button1, Color.White);
                    break;



        }
    }
}

}

マウスの位置が変更された理由は何ですか?

4

1 に答える 1

4

だから私はそれを理解しました。

誰かが問題を抱えている場合、解決策は : Game1 参照をベースクラスとして削除することでした。ゲーム クラスが複数回作成されたため、ウィンドウ座標がスタックされていました。

于 2013-05-13T16:03:06.890 に答える