【发布时间】:2015-04-10 23:44:24
【问题描述】:
我正在制作一款游戏,但遇到了一些障碍。从先前的研究中,我发现了一种从多个类中更改变量的方法,但它不起作用。我已将所有屏幕设置为一个数组列表,并且我正在尝试使用此变量在屏幕之间进行更改,但屏幕没有更改。 Visual Studio 中没有出现错误,所以我不知道出了什么问题。很抱歉无法指出某一行。非常感谢任何帮助。
这是使用 Int32 GlobalVar.activescreen 的类
public class ManageTheseScreens
{
ArrayList Screens;
Screen CurrentScreen;
public ManageTheseScreens()
{
Screens = new ArrayList();
Screens.Add(new TitleScreen());
Screens.Add(new OptionScreen());
CurrentScreen = (Screen)Screens[GlobalVar.activescreen];
}
public void Draw(SpriteBatch spriteBatch)
{
CurrentScreen.Draw(spriteBatch);
}
}
这是保存 Int32 的类
public static class GlobalVar
{
public static Int32 activescreen = 0;
}
这是试图改变它的类
class OptionScreen : Screen
{
Rectangle titleButton1Rectangle = new Rectangle(450, 100, 222, 44);
MouseState mouseState;
public OptionScreen()
: base()
{
}
public void Update()
{
mouseState = Mouse.GetState();
if (titleButton1Rectangle.Contains(new Point(Mouse.GetState().X, Mouse.GetState().Y)))
{
if (Mouse.GetState().RightButton == ButtonState.Pressed)
{
///this should switch screens
GlobalVar.activescreen = 1;
}
}
}
【问题讨论】:
-
什么不起作用?我猜屏幕没有变化?可能是因为您更改了变量但在更改后没有调用任何检查它的东西....在这里猜测是因为您没有提供足够的信息
-
正确,屏幕没有变化。我认为我不需要调用任何更新它的东西,因为它在一个每秒调用多次的 Draw 函数中。如果我错了,请纠正我,但我相信这就是它的工作原理。
-
请学习使用调试器,您应该能够通过运行程序并查看变量的值来告诉我们变量的值是否真的发生了变化
-
您在屏幕上绘图,但您不更改屏幕。 CurrentScreen = (Screen)Screens[GlobalVar.activescreen];更改变量后需要再次调用。
-
@Sorceri 好的,所以我将 CurrentScreen = (Screen)Screens[GlobalVar.activescreen]; 放入每秒会调用多次的 draw 方法中,但值对于 GlobalVar.activescreen 仍然没有改变
标签: c# visual-studio visual-studio-2013 xna xna-4.0