비디오 게임 코스 용 게임을 쓰고 있습니다. (불행히도 아무것도 가르쳐주지 않았습니다) 게임 실체와 게임을 실제로 실행하는 클래스 간의 상호 작용을 디자인하는 데 어려움을 겪고 있습니다.내 GameManager 클래스가 대부분의 것들과 친구가되는 것을 피하려면 어떻게해야합니까?
내 문제는 상당히 줄어 듭니다. 엔티티가 위치를 가지고 있다고 가정하면 게임 관리자가 게임 단계를 실행하기를 기다릴 필요없이 직접 수정할 수는 있지만이를 수행 할 수 있어야합니다. 액세스하고 AI 검사를 실행하는 등의 작업을 수행합니다.
내 솔루션 친구가 GameManager
로하는 Position
클래스를 작성하는 것입니다, 그리고 따라서 관리자가 실체 '위치를 수정할 수있을 것이라고이
class Entity {
public:
Position & getPosition() { return pos_; }
private:
Position pos_;
};
같은 엔티티 클래스를 만들 수 있지만, 다른 클래스는 것 오직 관찰 할 수 있어야합니다. 그러나이 추론은 많은 다른 속성들에 대해서 유효 할 것이고 엔티티 클래스는 사실 더 많은 속성을 가진 일련의 하위 클래스로 파생되기 때문에 거의 모든 곳에서 friend
속성을 배치해야 할 것입니다.
이 문제를 해결하기위한 더 좋은 방법은 무엇입니까?
나는 당신이 너무 복잡하다고 생각합니다. 엔티티는 게임 컨텍스트 외부에서 요청되거나 수정 될 수있는 위치를 가지므로 엔티티는 해당 위치에 대한 getter와 setter를 제공해야합니다.엔티티의 위치 설정자가 적절한 시간에 호출되도록 보장하는 것은 엔티티의 책임이 아닙니다. – bengoesboom
@bengoesboom 따라서 Entity 인스턴스를 유지하는 사람은 단순히 관리자가 아닌 클래스의 참조 만 Manager 클래스에 반환해야합니다. 그렇다면 어떻게 작동할까요? – Svalorzen