[英]Why do I not have access to App.xaml.cs from other classes in my app?
[英]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.