簡體   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