2017-11-19 4 views
1

현재 Android 용 Java에서 2D 게임 엔진을 만들고 있습니다. 엔진은 기본적으로 엔티티 구성 요소 시스템입니다. 먼저 구성 요소 유형을 연결할 수있는 청사진 (id에 대한 래퍼)을 만듭니다. 나중에 청사진을 "빌드"할 수 있습니다. 즉, 청사진과 연관된 각 유형의 객체가 초기화되어 업데이트 루프에 놓입니다. 구성 요소에 액세스 할 수있는 엔티티 (또한 int id에 대한 랩퍼)가 리턴됩니다.생성자 지정, 나중에 초기화 (Java)

개체를 추가 할 때 개체가 초기화되지 않습니다. 즉, 그 당시 생성자를 제공 할 수 없다는 것을 의미합니다. 어떻게 든 해결하고 싶습니다.

이 내가 현재 청사진 구성 요소 유형을 연결하는 방법입니다

public <T extends Component> void addComponent(BluePrint bluePrint, Class<T> type) { 
    bluePrintMap.get(bluePrint.getId()).add(type); 
} 

ID는 방법 참조를 반환하거나 addComponent 인수로 생성자 매개 변수를 제공하고 나중에 사용할 수 있도록 저장하는 것을 좋아합니다. 나는 심지어 생성자 인수의 길이를 미리 알지 못하기 때문에이 문제에 접근하는 방법을 모르겠습니다. 모든 입력이 무시됩니다.

편집 : 가능한 해결책은 실제로 구성 요소의 인스턴스를 만들고 나중에 사용자가 청사진을 작성하기로 결정할 때 복사본을 만드는 것이지만 이는 다른 문제를 일으킬 수 있습니다.

+0

1) 일반적인 접근 방식이 효과적 일 수 있습니다. 2) 다양한 인수가있는 메소드를 사용하여 "얼마나 많은 인수가 있는지"문제를 해결할 수 있습니다 (https://docs.oracle.com/javase/8/docs/technotes/guides/language/varargs를 참조하십시오). .html) 또는'Collection' 또는 배열 객체를 전달할 수 있습니다. –

+0

@StephenC 올바른 방향으로 나를 가리켜 주셔서 감사합니다 – Tagor

+0

나는 당신의 질문을 따르고 있는지 잘 모르겠다. 그러나 당신은'Supplier '을 전달할 수 있었는데, 이것은 만들어 질 때 호출 될 공장이되었다. 구성 요소? –

답변

0

결국 나는 편집에서 제공 한 솔루션과 함께 갔고, 지금까지 아주 잘 작동하는 것으로 보이고 또한 좋은 유형 안전성을 얻습니다. 단점은 내가 스크립트 구성 요소를 만들 때 사용자가 쉽게 만들고 싶다면 엔진이 일종의 직렬화를 사용하여 복사본을 수행해야한다고 생각합니다.