这是我创建按钮的类文件:
class Button
{
Texture2D buttonTexture;
Rectangle buttonRectangle;
Color buttonColour = new Color(255, 255, 255, 255);
public Vector2 size, buttonPosition;
public Button(Texture2D newButtonTexture, Vector2 newSize)
{
buttonTexture = newButtonTexture;
size = newSize;
}
public void setPosition(Vector2 newButtonPosition)
{
buttonPosition = newButtonPosition;
}
bool down;
public bool isClicked;
public void Update(MouseState mouse)
{
buttonRectangle = new Rectangle((int)buttonPosition.X, (int)buttonPosition.Y, (int)size.X, (int)size.Y);
Rectangle mouseRectangle = new Rectangle(mouse.X, mouse.Y, 1, 1);
if (mouseRectangle.Intersects(buttonRectangle))
{
if (buttonColour.A == 255)
down = false;
if (buttonColour.A == 0)
down = true;
if (down)
buttonColour.A += 3;
else
buttonColour.A -= 3;
if (mouse.LeftButton == ButtonState.Pressed)
isClicked = true;
}
else if (buttonColour.A < 255)
{
buttonColour.A += 3;
isClicked = false;
}
}
public void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Draw(buttonTexture, buttonRectangle, buttonColour);
}
}
下面是我在LoadContent中创建按钮的方法(忽略破旧的参数,就像我现在正在做的那样):
btnResume = new Button(Content.Load<Texture2D>("Buttons/button_Resume"), new Vector2(GraphicsDevice.Viewport.Width / 1.875f, GraphicsDevice.Viewport.Height / 4));
btnResume.setPosition(new Vector2(GraphicsDevice.Viewport.Width / 2 - (0.5f*btnResume.size.X), GraphicsDevice.Viewport.Height / 3));
btnQuit = new Button(Content.Load<Texture2D>("Buttons/button_Exit"), new Vector2(GraphicsDevice.Viewport.Width / 1.875f, GraphicsDevice.Viewport.Height / 4));
btnQuit.setPosition(new Vector2(GraphicsDevice.Viewport.Width / 2 - (0.5f*btnQuit.size.X), GraphicsDevice.Viewport.Height - (GraphicsDevice.Viewport.Height / 3)));
这就是我在Game1.cs的绘图功能中绘制两个按钮的方法:
case GameState.Menu:
btnResume.Draw(spriteBatch);
btnQuit.Draw(spriteBatch);
break;
一切正常。然而,出于某种原因,当为“Play”按钮执行相同的操作以进入称为“MainMenu”的新游戏状态时,该按钮不会显示(我已经测试过将按钮代码置于游戏状态“菜单”中)并且按钮确实出现,在“菜单”以外的任何其他游戏状态下它都不会显示。
有人知道它为什么不起作用吗?我记得创建按钮,设置位置,然后在Game1.cs中绘制函数的“case GameState.MainMenu”部分中绘制它,所以老实说我不知道为什么它不起作用。作为旁注,我已经尝试为另一个名为“CharacterSelection”的游戏状态绘制按钮,这也不起作用,但是如果我使用spriteBatch.Draw它会起作用(所以我很确定它是按钮的问题类'绘制函数。
我可以提供代码或游戏内元素的截图,如果代码很乱,我很抱歉,我倾向于这么做。这是我的第一个XNA游戏,过去我没有用c#编码,所以这对我来说很新。
编辑:
以下是我的所有游戏状态:
enum GameState
{
Opening,
MainMenu,
CharacterSelection,
Countdown,
Playing,
Menu,
Options,
}
GameState CurrentGameState = GameState.Opening;
打开 - 打开电影主菜单 - 标题屏幕基本上是字符选择 - 选择要播放的字符。倒计时 - 比赛开始前3,2,1 GO。正在播放 - 游戏处于活动状态,玩家正在播放e.t.c菜单 - 暂停菜单(按下esc时打开)选项 - 在暂停或主菜单中按下“选项”时(尚未设置)。
答案 0 :(得分:0)
感谢您的帮助,但我已经解决了。我傻了!忘了“btnPlay.Update(mouse);”在我的更新功能! -__-