我正在制作游戏而且我遇到了一些障碍。从以前的研究中我发现了一种从多个类改变变量的方法,但它没有用。我已将所有屏幕设置为数组列表,并且我尝试使用此变量在屏幕之间切换,但屏幕不会更改。在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;
}
}
}
答案 0 :(得分:0)
你不需要调用CurrentScreen =(屏幕)屏幕[GlobalVar.activescreen]; 在你的绘制方法中。在ManageScreen类中,您应该有一个更新方法
Public void UpdateCurrentScreen()
{
CurrentScreen = (Screen)Screens[GlobalVar.activescreen];
}
在你的更新方法中调用
GlobalVar.activescreen = 1;
设置var后,您将在ManageScreens中调用update方法
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;
//variable changes so you now have to update the member CurrentScreen to reflect the change hence the example of below
manageScreensInstance.UpdateCurrentScreen();
}
}
}
静态变量及其生命周期的良好链接 C# Static variables - scope and persistence
GlobalVar.activescreen总是0吗?你有一个断点,以确保它实际上命中代码行来改变变量吗?