2012-01-06 2 views
0

내 게임에 대부분의 관리자가있는 핵심 클래스가 있습니다. 게임이 시작될 때 모든 리소스, 언어 데이터, 비트 맵, 사운드가 관리자에 의해로드되기 때문에 여기에 있습니다.여러 클래스를 통해 클래스를 전달하는 방법은 무엇입니까?

그런 다음 장면 관리자가 만들어지고 첫 번째 장면이 초기화됩니다.

상위 수준 클래스의 데이터를 장면과 같은 하위 수준 클래스로 공유하면 문제가 발생합니다.

장면이 시작되면 관리자가 비트 맵과 사운드를 요청해야합니다. 대부분의 장면은 언어를 기반으로 버튼을 배치 할 단어를 찾아야합니다.

내가하는 방식은 일종의 관리자 관리자 클래스를 사용하는 것입니다. 대부분의 장면에서 사용하는 각 유형의 관리자로 구성됩니다. 이것은 현재 장면에 대한 포인터를 전달하는 장면 관리자에게 전달됩니다.

즉, 새 관리자가있을 때마다 Manager 관리자의 생성자를 변경하고 장면 관리자에서 몇 가지 사항을 변경해야합니다.

더 좋은 방법이 있나요? 이런 종류의 일은 보통 어떻게 이루어 집니까?

덕분에 내가 당신에게 싱글 톤 패턴을 추천 할 것입니다 글로벌 사용할 수있는 기능과 데이터를

답변

2

이 일의 가장 일반적인 방법은 싱글 함께 호출 할 수 있기 때문에

이 정말 잘 작동합니다. 그래도 일반적인 것이기 때문에 그것이 최선의 방법이라는 것을 의미하지는 않습니다.

동일한 작업을 수행하는 다른 방법은 dependency injection입니다. 클래스의 생성자는 필요한 관리자에 대한 포인터를 가져옵니다. 이렇게하면 모든 종속성을 한 곳에서 수집 할 수 있다는 장점이 있으며 모든 관리자에 대한 테스트 코드를 쉽게 대체 할 수 있습니다.

0

. 다른 장면에 대해 다른 데이터가 필요한 경우 다중 싱글 톤 (getInstance 함수에 전달 문자열)을 사용하거나 java의 Property 클래스와 같이 문자열/이름별로 데이터에 액세스하는 함수가있는 인터페이스를 작성하는 것이 좋습니다.

+0

싱글턴? 그게 지금 안티 패턴이 아닌가? – Lalaland

+1

그것 아직도 널리 퍼져 있고 왜 내가 더 이상 유행에서 많이 isnt하기 때문에 해결책을 거부해야하는 요점을 참조하십시오 – Paranaix

+1

@ paranaix : 어쩌면 거기에 더 이상 충분히 고려되지 않은 몇 가지 이유가 있습니다 .. – tp1

0

모든 관리자를 보유하는 싱글 톤 class Root이 있습니다. 초기화하는 동안 Root 객체는 모든 관리자를 구성합니다. 그런 다음 모든 관리자에 대해 get 함수를 추가 할 수 있습니다. 어디서나 코드에서 당신이

Root::getPtr()->getTextureManager()->whatever() 
관련 문제