2011-11-16 3 views
3

화면 기반 메뉴 탐색을 우아하게 처리하기위한 디자인 패턴이나 전략을 권장 할 수 있습니까?메뉴 탐색을위한 디자인 패턴 (c/C++)

여기서 "화면 기반"은 게임의 사용자 인터페이스와 같이 다른 "화면"에 링크되는 일련의 상호 연결된 전체 화면 "페이지"를 의미합니다.

필자는 권장하지 않는 State 기반 디자인 패턴을 구현했습니다.
코드가 지저분 해지고 테스트하기가 점점 어려워지는 모든 종류의 상태 기반 버그에 취약 해집니다.

예 :

void InitState() 
{ 
    switch(nextState) 
    { 
     case kScreenC: 
      if(curState == kScreenA) 
       ScreenC.InitFromA(); 
      if(curState == kScreenB) 
       ScreenC.InitFromB(); 
      etc... 
    } 
} 
: 당신이 항목의 조건을 처리 할 필요가 끝낼 수 있습니다이 방법 또한

void Update(float dt) 
{ 
    switch(curState) 
    { 
     case kScreenA: 
      ScreenA.Update(dt); 
      if(ScreenA.IsDone()) 
      { 
       if(ScreenA.ReturnState == 1) 
        curState = kScreenB; 
       if(ScreenA.ReturnState == 2) 
        curState = kScreenC; 
       etc... 
      } 
    } 
} 

: 당신이 반환 조건을 처리 할 필요가 결국이 방법으로

void Update(float dt) 
{ 
    switch(curState) 
    { 
     case kScreenA: 
      ScreenA.Update(dt); 
      if(ScreenA.IsDone()) 
       curState = kScreenB; 
     break; 
     etc... 
} 

이렇게 설계하는 더 좋은 방법이 있어야합니다. 더 나은 방법을 설명 할 수 있습니까? GUI를 구현

건배,
slushduck

답변

0

정상적인 방법으로는 MVP 또는 presenter first을 사용하고 있습니다. 메뉴가 여러 화면과 복잡하면 몇 가지 MVP 트리오가 필요합니다.

1

간단한 메뉴 시스템의 경우 State Design Pattern을 사용할 수 있습니다. 인터페이스 메뉴를 만들고 구체적인 클래스 (FirstMenu, SecondMenu 등)로 구현하십시오. 메뉴를 묘화 해, 현재의 선택 끝난 메뉴의 참조를 가지는 MenuContext를 작성합니다. 이 currentSelected Menu를 사용하여 ContextMenu는 호출을 적절한 메뉴에 위임하는 것을 알고 있습니다. 상태 패턴을 사용하여 우아한 메뉴 트리를 만들 수도 있습니다. https://en.wikipedia.org/wiki/State_pattern