2012-10-27 1 views
1

나는 중력 시뮬레이터 프로그램 중 하나를 만드는 천문학 프로젝트에서 일하고 있습니다. 나는 천체로 가득 찬 우주를 나타내는 Uni 클래스를 가지고 있습니다 (Body 클래스의 인스턴스).계산에서 정확하게 렌더링을 분리하는 방법

Uni 클래스는 자신을 업데이트하고, 새 본문을 추가하고, id에 의해 본문을 제거 할 수 있습니다. 완전히 수학을 기반으로하며 혼자 일해야합니다.

파이어 게임을 사용하여 시뮬레이션을 실시간으로 선택적으로 표시하는 프로그램을 만들고 MatPlotLib을 사용하여 결과를 분석 할 계획입니다. 그러나 나는 약간의 계산 방법 (Uni)을 유지하고 렌더링 (Renderer)을 분리하는 방법에 대해 혼란스러워하고 있습니다.

주요 프로그램 :

나는이처럼 상상

  1. 수입 파이 게임, 초기화를하고 screen을 만듭니다.
  2. 유니버스를 인스턴스화하고 본문 등으로 채 웁니다 (실제로는 FileManager, uni의 JSON 사양을 읽음). 그러나

    1. uni.update(dt)
    2. #Listen to PyGame events, respond
    3. r.render(screen, uni, ui) #The UI class has a list of UI elements.

렌더러 네브라스카 :

  • Renderer
  • while run: 루프를 입력 작성 eds를 사용하여 그려야 할 PyGame 서페이스와 이미지의 영구 목록을 유지해야하며 문제가 있습니다. Uni이나 Body 인스턴스는 PyGame을 인식하지 못하므로 인스턴스를 보관할 수 없습니다.

    렌더러는 다른 한편으로는 render 메서드에 대해서만 존재하며, 필요에 따라 PyGame 서페이스를 만들고 파괴 할 수 없습니다 (성능이 좋을 것 같네요).


    한 가지 가능한 솔루션이 렌더러를하는 것이다 파이 게임 객체의 사전, 신체의 모든 식별자로 식별이있다. 그런 다음, 그것을 반복하고 사라진 시체를 제거하고 각 프레임에 새 프레임을 추가합니다.

    이것이 올바른 방법인가요?

  • 답변

    1

    본문 ID 대신에 Body 자체를 ID 대신 파이 게임 개체 사전에 추가하면 어떨까요? 결국 파이썬 변수는 단지 레이블 일 뿐이므로 렌더러는 변수가 무엇을 나타내는 지 알 필요가 없습니다. ID를 조회해야하는 번거 로움을 줄일 수 있습니다.

    관련 옵션은 우주에 하나 이상의 viewport 개체를 추가하는 것입니다. 보기 메커니즘의 구현에 관계없이 일반적으로 전체 유니버스를 표시하지 않으므로 뷰포트가 우주의 적절한 특성이됩니다. 뷰포트를 사용하면 몇 가지 방법을 사용할 수 있습니다 (작성 및 크기 조정 제외).먼저 뷰포트에있는 모든 Body을 가져 오는 방법입니다 (뷰포트 객체에 보관할 목록 만 반환 할 수 있음). 둘째, 두 개의 목록을 포함하는 튜플을 얻는 방법. 뷰포트에 표시된 Body 중 하나와 마지막 업데이트 이후 뷰포트에서 사라진 Body의 목록 중 하나입니다. 뷰포트에는 유니버스의 업데이트 메서드에서 호출하는 업데이트 메서드도 있어야합니다.