![](/img/trans.png)
[英]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.