如何从其他类中访问我的“当前屏幕”变量?

时间:2014-02-18 14:08:27

标签: c# xna

我有一堆屏幕都是从名为GameScreen的基础抽象类继承的。它们包括各种按钮,如果按下,我想用来改变当前屏幕。目前,我正在尝试将屏幕从startScreen更改为overviewScreen。

我的Game1课程中有一个变量:

public GameScreen CurrentScreen;

最初设置为:

CurrentScreen = startScreen;

然后我使用以下行来更新和绘制游戏,基于哪个屏幕是当前屏幕:

CurrentScreen.Update();
...
CurrentScreen.Draw(spriteBatch);

在我的startScreen类中,我想在update方法中编写类似的内容:

if (//Button is pressed)
{
     game.CurrentScreen = overviewScreen; 
}

现在显然不行。但我看不出怎么做。基本上我想从一个类中访问CurrentScreen变量,并将其更改为我想要的任何一个屏幕,我觉得必须有一个干净的方法来执行此操作。

如果需要任何其他信息,请告诉我,我觉得我根本没有解释过这个。

修改

startScreen和overviewScreen是主要包含我想要显示的屏幕的Update和Draw方法的类。 GameScreen是他们都来自的基类。 CurrentScreen只是一个变量,用于确定哪个屏幕处于活动状态。

2 个答案:

答案 0 :(得分:1)

使用静态对象

public static GameScreen CurrentScreen;

和overviewScreen相同

答案 1 :(得分:1)

好的,对我来说它更清洁。您可以为Game1

添加一些方法
public void SwitchToStartScreen(){...}
public void SwitchToOverviewScreen(){...}
//etc

然后你可以为你的startScreen课程(以及其他课程)添加一个属性

public Game1 Parent {get;set;}

强制构造函数传递Game1对象,在该对象中将该参数分配给Parent属性。然后在特定情况下你可以使用

Parent.SwitchToOverviewScreen();

从外部类手动访问和更改属性违反了面向对象的原则。

另外,使用简短的命名约定,因为如果其中一个类定义使用Pascal case而其他类使用Camel case,则很难理解你所写的内容。您的startScreen更像是对象名称,而它的使用方式与类名相同。 Eithar,或者你没有看到阶级和对象之间的区别。 默认情况下,在C#中,Pascal case用于声明类。