이 문제가 내 질문을 명확하게 해주길 바랍니다. 그래도 이해가 안된다면 완전히 이해하고 싶습니다. 그럴 경우 알려주세요. 더 명확하게 해보도록하겠습니다.
객체 지향 게임 개발에 익숙해 지도록 만든 매우 간단한 게임 인 BoxPong을 만나보십시오 . 상자를 드래그하여 공을 제어하고 노란색 물건을 수집하십시오.
BoxPong을 만드는 것은 무엇보다도 근본적인 질문을 공식화하는 데 도움이되었습니다. 서로 "연장 "하지 않고 서로 상호 작용하는 객체를 어떻게 가질 수 있습니까? 즉, 객체가 계층 적이 지 않고 공존 할 수있는 방법이 있습니까? (아래에서 더 자세히 설명하겠습니다.)
개체 공존 문제가 일반적인 문제인 것 같아서이를 해결할 수있는 확실한 방법이 있기를 바랍니다. 나는 사각형 휠을 재발 명하고 싶지 않기 때문에 내가 찾는 이상적인 대답은 "여기서 당신의 문제를 해결하는 데 일반적으로 사용되는 디자인 패턴"이라고 생각합니다.
특히 BoxPong과 같은 간단한 게임에서는 같은 수준에 소수의 개체가 공존하거나 존재해야한다는 것이 분명합니다. 상자가 있고, 공이 있고, 소장품이 있습니다. 객체 지향 언어로 표현할 수있는 모든 것은 엄격한 HAS-A 관계입니다. 멤버 변수를 통해 이루어집니다. 나는 단지 시작해서 그것을 할 수 없으며 다른 객체 ball
에 영구적으로 속해야 합니다. 그래서 주요 게임 객체가 있다는을 설정 한 이 상자를 차례로 상자는 이 공을, 그리고 이 점수 카운터. 각 개체에는update()
나는 모든 아이들의 업데이트 메소드를 호출 주요 게임 객체의 update 메소드를 호출하고, 그들은 차례로 모두의 업데이트 방법 호출 등의 위치, 방향을 계산하고 내가 거기에 비슷한 길을 갈 방법, 자신의 아이를. 이것이 객체 지향 게임을 만드는 유일한 방법이지만 이것이 이상적인 방법은 아니라고 생각합니다. 결국, 나는 공이 상자에 속하는 것이 아니라 같은 레벨에 있고 상호 작용하는 것으로 생각합니다. 나는 모든 게임 객체를 메인 게임 객체의 멤버 변수로 바꾸어 달성 할 수 있다고 생각하지만 아무것도 해결하는 것을 보지 못합니다. 내 말은 ... 명백한 혼란을 버리고 공과 상자가 서로 를 알아 갈 수있는 방법 , 즉 상호 작용하는 방법이 있을까요?
서로간에 정보를 전달해야하는 개체 문제도 있습니다. SNES 용 코드를 작성하는 데 약간의 경험이있어서 거의 모든 RAM에 항상 액세스 할 수 있습니다. 수퍼 마리오 월드를 위해 커스텀 적을 만들고 있다고 가정 해 봅시다. 마리오의 모든 코인을 제거하고 문제없이 $ 0DBF를 처리하기 위해 0을 저장하기 만하면됩니다. 적들이 플레이어의 상태에 접근 할 수 없다는 제한은 없습니다. C ++ 등을 사용하면 종종 다른 객체 (또는 전역)에 값을 액세스 할 수있는 방법을 궁금해하기 때문에이 자유에 흠뻑 빠졌다고 생각합니다.
BoxPong의 예를 사용하여 공이 화면 가장자리에서 튀어 오도록하려면 어떻게해야합니까? width
과 height
의 속성입니다 Game
클래스는,ball
그들에게 접근 할 수 있습니다. 이러한 종류의 값을 (생성자 또는 필요한 메소드를 통해) 전달할 수는 있지만 나쁜 연습을 비명을 지 릅니다.
내 주요 문제는 서로를 알기 위해 객체가 필요하다는 것입니다.하지만 내가 볼 수있는 유일한 방법은 추악하고 비실용적 인 엄격한 계층 구조입니다.
C ++에서 "친구 클래스"에 대해 들어 보았는데 어떻게 작동하는지 잘 알고 있지만 최종 솔루션이라면 friend
모든 C ++ 프로젝트마다 키워드가 부어 지지 않고 어떻게 나오는지 알 수 없습니다 . 모든 OOP 언어에 개념이 존재하지 않습니까? (방금 전에 배운 함수 포인터도 마찬가지입니다.)
어떤 종류의 답변이라도 미리 감사드립니다. 다시 말하지만 이해가되지 않는 부분이 있으면 알려주십시오.