试图改变另一个类的变量,而不是工作

时间:2015-02-10 19:29:17

标签: c# visual-studio visual-studio-2013 xna xna-4.0

我正在制作游戏而且我遇到了一些障碍。从以前的研究中我发现了一种从多个类改变变量的方法,但它没有用。我已将所有屏幕设置为数组列表,并且我尝试使用此变量在屏幕之间切换,但屏幕不会更改。在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;
        }
     }
 }

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吗?你有一个断点,以确保它实际上命中代码行来改变变量吗?