繁体   English   中英

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

[英]How do I access my “Current Screen” variable from within other classes?

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

使用静态对象

public static GameScreen CurrentScreen;

和overviewScreen相同

好吧,对我来说它更清洁。 您可以为Game1类添加一些方法

public void SwitchToStartScreen(){...}
public void SwitchToOverviewScreen(){...}
//etc

然后你可以添加一个属性到你的startScreen类(以及其他类)

public Game1 Parent {get;set;}

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

Parent.SwitchToOverviewScreen();

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM