菜单按钮未显示c#

时间:2015-08-18 23:08:07

标签: c# button menu state monogame

我在业余时间制作2D太空射击游戏,以便在大学开始之前在c#中练习。但是,我遇到了一个我似乎无法弄清楚的问题。对于菜单,我按照Youtube教程了解如何制作菜单,但按钮没有显示。我花了最近几天试图解决它,但没有运气因此,任何帮助将不胜感激。如果代码令人困惑我道歉,我还在学习。当我运行游戏时,我没有任何错误,我只得到一个没有显示按钮的空白蓝屏。

按钮类

DS$Factor

相关Game1.CS代码:

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Game1
{
    class Button : Game1
    {
        Texture2D texture;
        Vector2 position;
        Rectangle rectangle;
        Color colour = new Color(255, 255, 255, 255); 
        public Vector2 size;
        bool down;
        public bool isClicked;

        public Button(Texture2D newText, GraphicsDevice graphics)
        {
            texture = newText; 
            size = new Vector2(graphics.Viewport.Width / 20, graphics.Viewport.Height / 10);

        }

        public void Update(MouseState mouse)
        {
            rectangle = new Rectangle((int)position.X, (int)position.Y,
                (int)size.X, (int)size.Y);

            Rectangle mouseRect = new Rectangle(mouse.X, mouse.Y, 1, 1);

            if (mouseRect.Intersects(rectangle))
            {
                if (colour.A == 255) // if only one thing is in an if statement curly braces aren't needed
                    down = false;
                if (colour.A == 0)
                    down = true;

                if (down) colour.A += 3;
                else colour.A -= 3;
                if (mouse.LeftButton == ButtonState.Pressed)
                    isClicked = true;
            }
            // Once the mouse cursor has moved away from the button, the opacity will begin to increase.
            else if (colour.A < 255)
            {
                colour.A += 3;
                isClicked = false;
            }
        }

        public void setPosition(Vector2 newPosition)
        {
            position = newPosition;
        }

        public void Draw(SpriteBatch spriteBatch)
        {
            spriteBatch.Draw(texture, rectangle, colour);
        }
    }`
}

我已经拿出了一些与手头问题无关的代码。如果您更容易解决问题,请告诉我,我将发布game1类的所有代码。

非常感谢。

1 个答案:

答案 0 :(得分:2)

虽然这个代码中有许多改进的空间(为什么你的按钮继承自Game1类只是作为一个例子)我相信你的问题是由于你的按钮永远不会初始化矩形属性。您在构造函数中设置了大小,但是在调用update方法之前,您的矩形永远不会被初始化/设置。在调用button.Update方法之前的含义是你的矩形的宽度和高度为0,0。你的button.Update方法在单击按钮之前不会被调用。这就是按钮不可见的原因。因此,要解决您的问题,请在构造函数中初始化矩形。

public Button(Texture2D newText, GraphicsDevice graphics)
    {
        texture = newText; 
        size = new Vector2(graphics.Viewport.Width / 20, graphics.Viewport.Height / 10);
        rectangle = new Rectangle(0, 0, size.X, size.Y);

    }