이렇게하는 데는 두 가지 주요 방법이 있습니다.
- 글로벌 변수 또는 싱글 톤을 통해 게임 상태에 전역으로 액세스 할 수있게 만드십시오.
- 게임 상태 공급자 개체를 게임 상태를 알아야하는 개체에 전달합니다.
나는 당신의 의존성을 더 명백하게 만들기 때문에 옵션 2를 선호한다.
public enum GameState
{
Running,
Paused
}
public interface IGame
{
GameState State { get; }
}
public class SomeObject
{
private IGame m_game;
public SomeObject(IGame game)
{
m_game = game;
}
public void Update()
{
switch (m_game.State)
{
case GameState.Running:
UpdateRunning();
break;
case GameState.Paused:
UpdatePaused();
break;
}
}
}
public class Game : IGame
{
GameState m_state;
SomeObject m_object;
public Game()
{
m_object = new SomeObject(this);
m_state = GameState.Running;
}
public GameState State
{
get
{
return m_state;
}
}
}
그러나 가능하면 게임 상태를 게임 이외의 다른 개체에 노출시키지 마십시오. 그것은 당신의 게임의 캡슐화를 깨고 단단히 당신의 물건들을 연결시킵니다. 객체가 게임 상태를 실제로 알아야합니까? 아니면 작동하기 위해 알아야 할 구체적인 것이 있습니까? 게임 클래스에 의해 제어되는 각 게임 상태에 해당하는 두 개의 개별 객체를 가질 수 있습니까?
+1, 그리고 Beast Number – Cheezmeister