繼上一篇動畫控制 - Combo 之後,我想是時候將 Animation Module 做一次 Refactoring。這次的工程不小,幸運的是,用上 Claude 之後,Refactoring 的效率提升不少,並且也做了一個整體的 Profiling,想在這篇稍作記錄。
這次從包辦動畫的 Object Painter 中,將全部職責分別分派給 Animation Handler(Manager)、2D/3D Object Painter、Renderable Object、Camera,以及關於 Viewport 的部分分給 Main Window(GUI Widget)。
Animation Handler 跟其他的 Handlers 一樣,如 Keyboard Event Handler 和 Object Action Handler,都是在主動畫迴圈中統一調用 execute() 函式來執行各自的職責,採用的即是 Strategy Pattern 做的設計。
2D/3D Object Painter 這兩個類別會聚合到 Animation Handler 裡。當執行 execute() 時,會讓這兩者 Painter 分別負責繪製 2D 和 3D 的物件,目前僅實現 2D Object Painter。
Renderable Object 包含了 VBO、VAO、Texture、Sprite Sheet Struct。Texture 和 Sprite Sheet 依據物件的狀態而有不同的 Texture 和 Sprite Sheet。此類別擁有動畫的重要資料,是 Combo 系統中的重要元素之一。
Camera 未來應該會分成兩種不同的 Camera:一個負責 Animation(World)/ 透視投射,另一個則是 GUI Widget / 正交投射,Painter 也會照此分成兩類。目前僅實現 Animation 的部分,未來開發 GUI Widget 時會再實現第二類。
至於 Viewport 的部分,相關的 API 並不多,目前就由 Main Window 負責洗刷掉整個畫布(Canvas)。
重構後的類別與模組關係如下圖:
Last updated: