이것은 이 다른 질문에 대한 후속 질문 입니다.
세계의 표현 (현재 160Kmx160Km) 을 그림 영역 (현재 800x600 픽셀) 에 맞게 스케일링하는 공통 / 일반 / 최상의 패턴이 있는지 알고 싶습니다 .
적어도 네 가지 접근법을 생각할 수 있습니다.
순진한 사람 (내가 지금까지 한 방식). sc(vector)
전달 된 벡터의 축소 된 복사본을 반환 하는 전역 함수 를 구현 했습니다. 물론 작동하지만 다음과 같은 코드를 작성해야합니다.
drawCircle(sc(radius), sc(position))
랩핑 기능 . 여러 기능을 정의 할 수 있는데, 각각의 기능은 원래 미들웨어를 랩핑합니다. 예를 들어, myDrawCircle
먼저 스케일링이 필요한 인수를 스케일링 drawCircle
하고 후자 를 호출 하도록 정의 할 수 있습니다. 이렇게하면 코드를 더 읽기 쉽고 유지 관리하기가 쉬워 지지만 어리석게 들리는 많은 줄 바꿈 기능을 작성해야합니다.
함수 데코레이터 . 기존 미들웨어 함수를 간단히 장식하여 클래스의 인스턴스화되는 모든 매개 변수에 대한 자동 스케일링을 제공 할 수는 Vector3D
있지만 문제는 해당 함수가 동일한 매개 변수와 함께 작동 list
하거나 해당 매개 변수와도 작동 Vector2D
하므로 데코레이터는 알 방법이 없다는 것입니다 어떤 목록은 축척이 필요한지 (예 : 반지름) 어떤 목록이 아닌지 (RGB 값)
표면 초기화 . 그릴 표면을 정의 할 때 스케일링 팩터를 정의 할 수 있습니다 (그래서 픽셀이 아닌 미터를 매개 변수로 사용하도록). 이것은 나를 위해 투명하게 작동하고 선택하는 솔루션 일 것입니다. 물론 미들웨어로 구현해야하므로 실제 옵션이 아닙니다.
... 어쨌든 : 이것은 매우 일반적인 문제이므로 찾지 못한이 문제를 우아하게 해결하는 확립 된 패턴이 있는지 궁금합니다.
추신 :이 프로젝트에서는 python ( pygame )을 사용하고 있지만 Python / pygame 관련 답변은 높이 평가되지만 구체적인 구현보다는 패턴의 일반적인 / 높은 수준의 설명에 더 관심이 있습니다.
시간과 전문 지식을 미리 감사드립니다.