我正在研究天文學項目,製作其中一個重力模擬器程序。我有一個Uni
類,它代表了一個充滿天體的宇宙(Body
類的實例)。如何正確解耦計算與渲染
這個Uni
類能夠更新自己,添加新的身體,並刪除身體的id
。它完全基於數學,應該單獨工作。
圍繞它,我打算構建使用PyGame來選擇性地顯示模擬和MatPlotLib來分析結果的程序。然而,我對如何保持我的計算(Uni
)和渲染(Renderer
)解耦有點困惑!
我設想這樣的:
主程序:
- 進口pygame的,對其進行初始化,並創建一個
screen
。 - 實例化Universe,使用body等填充它(實際上由
FileManager
完成,它讀取單元的JSON規範)。 - 創建
Renderer
進入一個
while run:
循環:uni.update(dt)
#Listen to PyGame events, respond
r.render(screen, uni, ui) #The UI class has a list of UI elements.
然而,渲染器NE編輯保持PyGame表面和需要繪製的圖像的持續列表,並且存在問題。 Uni
和Body
實例都不必知道PyGame,所以它們不能保留它們自己。
另一方面,渲染器只有它的render
方法,它不能僅僅根據需要創建和銷燬PyGame曲面(我猜這樣做會影響性能)。
一個可能的解決辦法是有渲染器有pygame的對象字典,所有鑑定身體IDS。然後,它會迭代它,刪除任何已刪除的實體,並在每一幀中添加新的實體。
這是正確的路嗎?