2012-02-23 2 views
0

나는 Game State Managment 패턴을 기반으로 게임을 만들고 있습니다. 사용자가 레벨을 선택할 수 있도록 2 페이지에 20 버튼을 만들었습니다.DrawableGameComponent가 버튼을 만들기위한 잘못된 도구입니까?

LevelButton : TexturedDrawableGameComponent 

Inside LoadContent() 단추가 만들어져 GameComponent 컬렉션에 추가되었습니다. 이 권리를 얻으면 GameCompoenent는 일종의 글로벌 컬렉션이므로 사용자가 네 번째 페이지에서 두 번째 앱으로 돌아 가면 다른 20 개의 버튼이 추가됩니다.

컬렉션에서 모든 LevelButton을 지우는 루프가 추가되었지만 잘못되었습니다.

DrawableGameComponent가 버튼을 만드는 데 잘못된 도구입니까?

+0

좋습니다. 나는이 제목이 당신의 질문에 더 잘 맞을 것이라고 생각합니다. – Will

답변

3

Yes.

DrawableGameComponent 및 그 친구들은 (선택 사항) 비트의 XNA 프레임 워크입니다. 그들 도우미를 생각해보십시오. 간단한 예제 구현.

제공하는 기능에 대해 더 많은 기능이나 다른 기능이 필요한 경우 직접 구현해야합니다.

이 경우에는 UpdateDraw과 같은 메서드가 포함 된 "Button"개체 (예 : LevelButton)가 필요합니다.

그리고 나서 모든 단추를 보유 할 수있는 일종의 "단추 컨테이너"개체가 필요하며 화면에있을 때 해당 단추를 그려두고 업데이트해야합니다. 그러나 그들이 오프 스크린 일 때 그들과 아무 것도하지 마십시오.

는 (이 작업을 관리 할 수 ​​GameComponentCollection의 자신의 인스턴스를 생성하고 게임 구성 요소를 사용하여 유지한다. 그러나 당신은 여전히 ​​논리를 초기화/자신의 드로우/업데이트 /로드/언로드를 제공 할 수 있습니다. Game.Components에 대한 논리는 Game 내부입니다 을 사용하는 것이 좋습니다.)

글로벌 컬렉션에서 구성 요소를 추가 및 제거 (또는 비활성화/활성화)하는 대신에 끔찍한 오류가 발생하고 오류가 발생합니다 -prone. 하지 마.

+0

고마워요. 교육 카탈로그의 자습서가 이런 종류의 세계적인 상태를 사용한다는 것은 이상한 일입니다. –

-1

실행하면 잘못이 없다고 생각합니다.

어쩌면 당신은 몇 가지 더 우아한 방법으로 이것을 접근하거나 당신이 그것을하는 방식을 향상시킬 수 있습니다 ...하지만 문제는 그것이 달려야한다는 것입니다.

단추를 클릭하면 단추를 제거하려고 시도하는 것일 수 있습니다. 버튼을 업데이트하기 때문에 문제가 발생할 수 있습니다.

레벨 선택 화면이 비활성 상태이거나 파괴되면 버튼을 제거 할 시간입니다.

물론 버튼 목록을 관리하는 버튼 컬렉션 클래스를 만든 다음 DrawableGameComponent를 하나만 사용하거나 사용하지 않도록 설정하거나 다른 화면에서 유용하게 사용할 수 있습니다.

+0

"달리는다면 틀림 없다고 생각합니다." LMFAO! 실행되는 ALOT가 잘못되었거나 잘못 수행되었습니다. 전혀 모범 사례가 아닙니다! – Jason94

+0

물론 게임을하는 것이 잘못되었지만이 사람은 배우고 있습니다.이 대답에는 문맥이 있습니다 ... 왜 그렇게 잘못 되었습니까? 버튼이 필요하고 업데이트하고 그리기 방법, 왜 DrawableGameComponent를 사용할 수 없습니까? 전문가가 아닌 누군가를위한 첫 번째 단계입니다, 더 잘할 수 있다는 것을 발견하게하십시오 ... 그를 위해 문제는 실행해야한다는 것입니다 ... 나는 내 마음을 바꾸지 않습니다.) – Blau

관련 문제