문제

내 문제에 대한 설계 패턴 솔루션이 있다고 확신하지만 실행 가능한 접근 방식이 무엇인지 결정할 수는 없습니다. 나는 내가 원하는 것을 알고있다. 나는 단지 연결을 만드는 데 어려움을 겪고있다 ... 나는 설명 할 것이다 :

나는 게임을하고있다. 나는 GameObjects가 있습니다. 나는 GameBehaviors가 있습니다. 내 GameObjects의 속성은 모든 세부 사항이있는 XML 파일로 정의됩니다.

<type name="Object">
    <unit name="follower" behavior="followMouse" >
        ...other unit info here...
    </unit>
</type>

XML의 동작 속성의 값에 따라 GameObject가 인스턴스화되므로 IT 어떻게든 동작이 첨부되어 있습니다. 나는 부모의 모든 속성에 액세스 할 수있는 행동이 필요합니다.

나는 디자인 패턴에 대한 경험이 많지 않습니다. 그리고 많은 사람들이 거의 옳은 것처럼 보이지만 내가 읽은 예 중 어느 것도 나를 위해 클릭하는 것으로 보입니다.

나는 AS3와 함께 일하고 있지만 조금 더 일반적인 느낌을주고 있습니다.

도움이 되었습니까?

해결책

주요 목표는 명명 된 설계 패턴을 사용하지 않고 좋은 (신뢰할 수 있고 확장 가능하고 유지 관리 가능한) 솔루션을 찾아야하지만 구성을 사용하여 제안합니다.

따라서 게임 객체에는 initfromxml (xml) 메소드가 있거나 XML을 인수로 취하는 정적 공장 메소드가있을 수 있습니다. 이것은 XML을 구문 분석하고 행동을 찾은 다음 적절한 동작을 만듭니다. 다른 공장으로 행동을 만들 수 있습니다.

그런 다음 게임 객체 동작 목록에 동작을 추가합니다. 동작은 모두 공통 클래스에서 내려온 개체 일 수도 있고 모두 iBehavior 인터페이스를 구현할 수 있습니다.

행동은 게임 객체로 부름을 받거나 이벤트 리스너를 추가하여 자신의 일을 할 수 있습니다.

다른 팁

나는 당신의 접근 방식을 이해한다고 생각합니다.

무한한 효과, 상태, 행동 등이 잠재적으로 있기 때문에 게임에서 많이 발생합니다.

내가 당신의 문제에서 내가 보는 것은 당신은 "이 마우스를 따르나요", "이것은 키보드 명령에 응답하는 것"등을 더 많이 다루고 있다는 것입니다.

이 경우 당신이 할 수있는 일은 "마우스 폴로어"또는 "KeyboardResponder"와 같은 기능 클래스를 작성하여 GameObject를 생성자의 인수로 일반적으로 받아들입니다.

이러한 객체는 이벤트 핸들러를 EventListeners와 같은 GameObject에 직접 적용 할 수 있습니다.

제거 해야하는 경우 모든 기능적 객체를 GameObject 내의 배열에 저장할 수 있습니다.

배열에있을 때는 균일 한 메소드 세트가있는 기능 클래스 인터페이스를 만드는 것도 여전히 시원 할 수 있습니다. 예를 들어, GameObject가 비활성 또는 비활성화 된 경우

for each IFunctionalObject in GameObject.FunctionalObjects
IFunctionalObject.disable()

나는 당신이 정말로 다양한 게임 객체를 가지고 있다면이 접근법이 허용 될 수 있다고 생각합니다. 그리고 RPG가 다양한 기능의 수많은 스프라이트를 관리하는 괜찮은 예라고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top