我有一堆屏幕都是从名为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只是一个变量,用于确定哪个屏幕处于活动状态。
答案 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用于声明类。