2014-01-29 4 views
1

XNA 게임에 화면 관리를 구현하려고합니다. http://www.xnadevelopment.com/tutorials/thestateofthings/thestateofthings.shtml화면 관리 XNA C#

나의 현재 화면 전환 이벤트는 다음과 같다 : 지금까지 성공적으로이 링크에서 예 3 구현했습니다

이것은 (초기) 화면에서 "시작"에서 이동
public void GoToScreenOverview(object obj, EventArgs e) 
    { 
     screenStart = null; 
     screenOverview = new ScreenOverview(this, new EventHandler(GoToScreenOverview), globalVariables); 
     mCurrentScreen = screenOverview;    
    } 

, 게임을 다음 화면 "개요"로 이동합니다. 동등한 상호 방법 GoToScreenStart는 그 반대입니다.

내 질문은 다음과 같습니다. 모든 이벤트를 어떻게 관리합니까?

20 개의 화면이 있다고 가정 해 보겠습니다. 각 화면 클래스는 전달 된 19 개의 EventHandler를 필요로하며, 이는 대단히 비효율적이며 새로운 화면을 추가하는 데 어려움을 겪습니다. 현재 GoToScreenX 유형은 Game1 클래스에있는 이벤트이지만 모든 이벤트가 각 Screen에서 상속하는 BaseScreen 클래스에있는 것이 더 적합하다고 생각됩니다.

답변

6

내가 너라면, ScreenManager 클래스를 만들 것이다. 이 같은 시작할 수 :

public class ScreenManager 
{ 
    List<GameScreen> screens; 
    bool isinitialized = false; 

    public override void Initialize() 
    { 
     base.Initialize(); 
     isinitialized = true; 
    } 

    protected override void LoadContent() 
    { 
     foreach (GameScreen screen in screens) 
      screen.LoadContent(); 
    } 

    public void AddScreen(GameScreen screen) 
    { 
     screens.Add(screen); 
     if (isinitialized) screen.LoadContent(); 
    } 

    // also create a removescreen 

    public void Draw(Gametime gametime) 
    { 
     foreach (GameScreen screen in screens) 
     { 
      screen.Draw(gametime); 
     } 
    } 
    // also create a similar method for Updating 
} 

당신은 ScreenManager로 만들 수있는 DrawableGameComponent (권장), 또는 그것의 각각의 방법에 maingame 호출 ScreenManager.Update()ScreenManager.Draw()있을 수 있습니다. 마지막으로 GameScreen 클래스를 만들고 업데이트하고 그리는 방법을 만든 다음 다른 모든 게임 화면을 GameScreen 클래스에서 상속 받도록해야합니다. 잘하면 이것은 당신에게 몇 가지 아이디어를 줄 것입니다.

+0

@ user2056166이 것이 도움이 되었습니까? – davidsbro