2011-09-02 58 views
0

我有一個名爲Main的主類,在Main類中有一個名爲State的變量,它的類型爲int。狀態變量包含一個狀態ID,它讓程序知道它在哪個狀態(菜單,指令屏幕......)在Main類中,我有一個從Sprite類發起的對象。現在我的問題是如何告訴對象狀態已經切換(這個很容易,我可以很容易地做出這個狀態,但下一個部分給我提出了問題),以及對象如何告訴Main類他想要切換狀態?在類之間交換數據

+0

您可能希望包含代碼示例以使您的解釋更易於遵循。在它的表面上,你可以有'someObject.StateChanged(int newState)'和'Main.ChangeState(int newState)',但這取決於你的其他交互。例如,你可能想要採取一種事件方法...通常,我不希望'Main'類會做很多事情,所以聽起來你可能會錯過一些類... – forsvarir

回答

2

這是我從你的問題理解,

  • Main是控制器類調用Sprite實例方法
  • State確定是呼籲Sprite實例的方法

在這種情況下,Sprite類應該包含一個名爲State的靜態屬性(最好這應該是enum而不是int)。

更新狀態變量是實例方法的責任。在完成實例方法的執行後,調用者可以檢查實例所處的狀態,然後適當地確定下一個操作過程。

更好的方法是根本不公開狀態(除非需要被外部對象使用)。在你的情況下,它似乎只是用來確定執行的方法(我猜你有一個switch語句來做到這一點)。

如果您想要實例根據自己的狀態執行特定方法,那麼您可以將此決定留給實例本身,而不是由控制器決定。實例可以有一個方法(例如Update()Execute()),它們根據操作的上下文執行操作(如菜單選項等)。該方法可以根據靜態成員state決定執行哪種內部方法。

+1

是的,你是完全正確,我是OOP的新手,我的想法是主類應該控制信息,它是應該這樣做的對象,主類應該只在需要時才檢查。 – LordShigi