2016-08-18 1 views
-1

나는 전에 여러 번 비슷한 질문을했음을 알고 있습니다. 그러나 이것은 다른 경우입니다.개체가 스스로 그려야합니까? (기하학과 질감의 혼합)

SDL2를 사용하여 C++로 게임을 작성하고 있습니다. 현재 모든 객체가 그립니다. 그들은 모두 다르게 다르게 드로잉하기 때문에이 작업을 수행합니다. 예컨대

는 버튼 파라미터로서 SDL_TTF 의해 생성 된 텍스처를 얻어 SDL_RenderCopy()을 사용하여 그려 또한 텍스트를 포함 SDL_RenderFillRect();

버튼 그려진 사각형을 함유한다.

또한,지도보기 위젯 (a tilemap를로드 기본적 그리드)은 수평 및 수직 SDL_RenderDrawLine() 호출을 포함하는 '은'루프를 이용하여 격자를 그린다.

마지막으로 타일 자체는 SDL_RenderCopy()을 사용하여 그려진 텍스처로 저장됩니다.

나는 일반적으로 객체를 그리지 않는 것이 바람직하다는 것을 알고 있습니다. 그러나 객체가 그려지는 방식에는 많은 차이가 있으므로 다른 방법이 확실하지 않습니다!

각 개체에 대해 GetTexture() 함수를 사용할 수 있다고 생각했는데 텍스처를 사용하는 것이 단순히 '텍스처 만 반환'할 수 있지만 기하학적 개체는 텍스처를 생성 할 수있었습니다. 사용자가 게임 세계를 탐색 할 때마다 그리드가 계속 업데이트되므로 (오프셋 값이 변경되고 이동할 때 그리드가 다시 그려지기 때문에) MapView 객체가 복잡해집니다.

+0

개체를 그리는 데 문제가 있다고 생각하지 않습니다. 대개는 렌더링 된 것을 관리하고 객체를 제거하는 것과 같은 다른 작업을 수행하는 렌더링 대기열이 있습니다. 객체가 자체적으로 그려지 든 또는 각 객체의 데이터에 액세스하는 하나의 함수로 모든 객체를 그릴 지 아무런 차이가 없습니다. 각 객체 유형에 대해 하나의 그리기 기능 세트를 가질 수 있으며 그 사이에서 전환 할 수 있습니다. – Harish

답변

2

이 유형의 질문과 마찬가지로 대답은 프로그램에 따라 다릅니다.

SDL을 사용하는 것과 같은 방법으로 모든 것을 그릴 수만 있다면 그럴 이유가 없습니다. 또 다른 방법은 각 객체에 대해 특정 렌더링 클래스를 사용하는 것이지만, 이는 노력을 두 배로 늘리는 것입니다. 모든 렌더링 코드를 하나의 클래스 나 함수로 묶어두면 좋지만 크고 복잡해집니다.

코드의 복잡성과 향후 코드에서 수행 할 작업을 판단하는 것이므로 가장 간단한 해결책을 선택하는 것이 좋습니다. 잠재적 인 단점을 고려했다면 교육적 결정을 내릴 수 있습니다.

관련 문제