2017-09-11 4 views
0

저는 MonoGame/XNA를 처음 접했고 첫 번째 실제 게임에서 우주 침략자를 시도하고 재창조 할 것이라고 생각했습니다. 침입자의 움직임을 처리하기 위해 모든 것을 처리하기 위해 "InvaderManager"클래스를 만들었습니다. 그런 다음 "EntityManager"라는 다른 클래스를 만들어 총알과 같은 다른 모든 엔터티를 처리했습니다.좋은 엔티티 관리자 처리 - C# XNA/MonoGame

예를 들어, "Bullet"클래스의 충돌 코드로 침입자가 충돌했을 때 제거하려고 할 때 실제 게임의 의미를 처리하는 "MainGame"클래스 내에서만 해당 클래스에 액세스 할 수 있습니다. ("InvaderManager"클래스에 액세스해야 함을 의미), 조금 어색 해져서 기본적으로 이러한 관리자 클래스의 함수를 정적으로 만들어서 외부 클래스가 인스턴스없이 호출 할 수 있습니다.

for(int i = 0; i < InvaderManager.spaceInvaders.Count; i++) 
     { 
      if(CollisionDetect(InvaderManager.spaceInvaders[i])) 
      { 
       EntityManager.Remove(this); 
       InvaderManager.Remove(InvaderManager.spaceInvaders[i]); 
      } 
     } 
이것은 물론 작동

하지만 뭔가이 그래서 아마도 내가이 모든 것을 처리 할 수있는 더 좋은 방법이 있다면 나는이 포럼을 물어 것이라고 생각 그것에 대해 갈 수있는 좋은 방법이 아니다 내게 말하고있다? 또는 내가 명시한 목적을 위해 특정 기능을 정적으로 만드는 것이 괜찮습니까?

+0

각 클래스 내부에서 로직을 처리하지 마십시오. 로직은 게임 엔진 내부에서 처리되어야합니다. 이렇게하면 코드가 빨라지고 이러한 문제가 발생하지 않습니다. – Fredrik

답변

0

상태를 전체적으로 표시하고 수정할 수있게되면 곧 다양한 코드가 해당 상태에 액세스하고 수정하며 전체 프로그램에 영향을주지 않고 코드를 변경하기가 어려워집니다.

가시성을 최대한 제한하십시오.

정적 함수는 완벽합니다. 전역 정적 상태 (정적 공용 배열과 같은)는 일반적으로 없습니다.

수업이 무엇을해야하는지 잘 모르는 경우 해당 수업을 작성하지 마십시오. InvaderManager은 엔티티 목록에 불과합니다. 그 다음 List을 사용하십시오.

좋은 객체 지향 디자인은 어렵고 우주 침략자에게는 필요하지 않습니다. 관리자 클래스가 아닌 데이터 유형 및 함수 측면에서 문제를 생각하십시오.

그런 일반적인 질문에 대해 더 구체적인 조언을하는 것은 어렵습니다.