2011-01-18 3 views
1

그래서 메인 게임 클래스가 있고 게임 상태를위한 열거 형을 만들었습니다. 이 열거 형을 다른 클래스에서 액세스 가능하게 만드는 방법은 무엇입니까? 나는 당신이 그것을 대중에게 만들어야 만한다는 것을 알고 있지만 나는 그것을 다른 클래스들에게 접근 가능하게 만드는 것처럼 보인다. 내가하려고하는 것은 enum을 통해 현재 게임 상태를 확인하고 현재 게임 상태에 따라 다른 작업을 수행 할 수 있도록 여러 클래스가 있어야합니다.기본 게임 클래스에서 enum이 정의되어있을 때 XNA의 다른 클래스에서 열거 형 액세스 가능하게 만드는 방법은 무엇입니까?

using MyGame.ThisIsMyNameSpace; 

노출되는 :

답변

0

은에서 무엇 네임 스페이스에 따라, 당신은 당신이 그것을에 액세스 할 수 있도록하려는 .cs 파일의 맨 위에 다음 줄 (또는 이와 유사한 일)을 배치해야 할 수도 있습니다 열거 형을 사용하면 완전히 한정하지 않아도 참조 할 수 있습니다.

또는 현재 게임의 상태에 액세스하는 방법이 필요하다면 뭔가 참조해야합니다. 많은 사람들이하는 일 중 하나는 Game 클래스에서 공개 속성을 만든 다음 해당 인스턴스에 대한 참조를 전달하는 것입니다. 다른 사람들은 전역 적으로 사용 가능한 공간을 유지하기 위해 싱글 톤 또는 정적 클래스를 만듭니다. 모두 코드 스타일과 게임의 크기에 따라 다릅니다.

3

이렇게하는 데는 두 가지 주요 방법이 있습니다.

  1. 글로벌 변수 또는 싱글 톤을 통해 게임 상태에 전역으로 액세스 할 수있게 만드십시오.
  2. 게임 상태 공급자 개체를 게임 상태를 알아야하는 개체에 전달합니다.

나는 당신의 의존성을 더 명백하게 만들기 때문에 옵션 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; 
     } 
    } 
} 

그러나 가능하면 게임 상태를 게임 이외의 다른 개체에 노출시키지 마십시오. 그것은 당신의 게임의 캡슐화를 깨고 단단히 당신의 물건들을 연결시킵니다. 객체가 게임 상태를 실제로 알아야합니까? 아니면 작동하기 위해 알아야 할 구체적인 것이 있습니까? 게임 클래스에 의해 제어되는 각 게임 상태에 해당하는 두 개의 개별 객체를 가질 수 있습니까?

+0

+1, 그리고 Beast Number – Cheezmeister

0
public class GameClass 
{ 
    public static GameState State; 
} 

이는 관계없이 사용자가 만든 얼마나 많은 GameClass 인스턴스 국가의 하나 개의 인스턴스가있을 것입니다 의미하지만이 경우 동작을 원하는 될 것처럼 보인다. gameClassInstance.State 대신 GameClass.State를 사용하여 액세스 할 수 있습니다. 상태 캡슐화의 경우

관련 문제