Camera zh TW - Akiaaaa20/Bit8_CLI GitHub Wiki
Camera 攝影機系統
BIT8_CLI 提供 Camera 系統,用來控制遊戲世界中哪些區域會顯示在畫面上。
在 BIT8_CLI 0.1.0 中,Camera 與 Map 資料關聯,並影響世界座標的繪製。
遊戲使用固定的 64 × 64 像素 Viewport。
1. Camera 概述
Camera 定義遊戲世界中可視範圍的中心。
Framebuffer 解析度固定為:
64 × 64 pixels
Map 可以遠大於 Viewport。
Camera 負責決定這個大型世界中的哪個區域會出現在畫面上。
2. Camera 與 Map
Camera 資料儲存在 Map 系統中。
.b8map 可以包含:
- Tile 資料
- Node
- Camera
Camera 讓 Runtime 可以在不改變 Framebuffer 解析度的情況下,顯示 Map 的不同區域。
詳細資訊請閱讀 Map。
3. Camera 位置
Camera 擁有世界座標位置。
這個位置代表 Viewport 的中心。
例如:
Camera position: (100, 80)
Viewport size: 64 × 64
概念上,可視範圍會從 Camera 中心向四個方向延伸約 32 像素。
因此,約略的可視範圍是:
X: 68 to 131
Y: 48 to 111
實際像素邊界取決於 Runtime 的座標與取整規則。
4. 世界座標
World Coordinates 用來描述遊戲世界中的位置。
例如:
- Map Tile
- Node
- Node Sprite
- 使用世界座標的繪製操作
當 Camera 啟用時,支援世界座標的繪製操作會依照 Camera 位置進行轉換。
因此,Viewport 可以顯示遊戲世界的不同區域。
5. 螢幕座標
Screen Coordinates 用來描述 Framebuffer 內的固定位置。
螢幕座標範圍:
X: 0 to 63
Y: 0 to 63
部分繪製操作使用 Screen Coordinates。
例如:
cls(0)
pix(32, 32, 7)
這些操作維持使用螢幕座標,不會受到 Camera 位移影響。
這對 UI 和畫面覆蓋元素很有幫助。
6. 世界座標轉換為螢幕座標
簡化的 Camera 轉換公式:
screen_x = world_x - camera_x + 32
screen_y = world_y - camera_y + 32
例如:
World position: (100, 80)
Camera position: (100, 80)
Screen position: (32, 32)
位於 Camera 中心的物件,會顯示在畫面中心附近。
這個公式用來說明概念。
實際像素位置仍可能受到 Runtime 整數座標規則影響。
7. Active Camera 選擇
Map 可以包含多個 Camera。
BIT8_CLI 0.1.0 使用以下規則選擇 Active Camera:
選擇已啟用且 ID 最小的 Camera。
這讓多個 Camera 同時存在時,仍然可以得到可預測的結果。
例如:
Camera ID 1 → Disabled
Camera ID 2 → Enabled
Camera ID 3 → Enabled
Active Camera 是:
Camera ID 2
8. Camera 與 Tile Rendering
Map Rendering 使用世界座標。
當 Camera 啟用時,Map 會依照可視世界區域進行繪製。
例如:
func draw()
cls(0)
map()
end
Camera 會決定 Map 的哪個部分出現在 64×64 Framebuffer 中。
9. Camera 與 Sprite
Node Sprite 使用世界座標。
當 Camera 啟用時,支援的 Sprite Rendering 會轉換成螢幕座標。
例如:
func draw()
self:spr()
end
Node 仍然保留自己的世界座標。
Camera 只會影響 Sprite 最終顯示在畫面上的位置。
詳細資訊請閱讀 Sprite 與 Animation。
10. Camera 與 UI
遊戲可能需要固定在畫面上的圖像。
例如:
- 血量顯示
- 計數器
- 選單
- 畫面覆蓋元素
Screen-space Drawing 很適合用來製作這些內容。
例如:
func draw()
cls(0)
map()
pix(32, 32, 7)
end
這裡的 pix() 會在固定的螢幕座標繪製像素。
Camera 不會改變這個像素的位置。
11. Camera 編輯
BIT8_CLI 的 VS Code Map Workspace 提供 Camera 視覺化功能。
開發者可以在編輯 Map 時檢視 Camera 位置。
Camera 資料屬於 Map 專案資料的一部分。
Runtime 負責選擇並套用 Active Camera。
詳細資訊請閱讀 Map Workspace。
12. Camera 與 Viewport 大小
BIT8_CLI 0.1.0 使用固定的 Framebuffer 解析度:
64 × 64 pixels
Camera 改變的是可視世界區域。
它不會改變 Framebuffer 的實際解析度。
因此,可以透過小型 Viewport 探索大型 Map。
13. 目前限制
BIT8_CLI 0.1.0 的 Camera 系統主要包含:
- 儲存在 Map 中的 Camera 資料
- 世界座標繪製位移
- 固定 64×64 Viewport
- 可預測的 Active Camera 選擇
- 螢幕座標繪製操作
進階 Camera 特效、電影式轉場,以及通用 Camera Script Framework,尚不屬於已確立的 0.1.0 功能。
下一步
Core Systems 文件已完成,接下來是開發工具。
相關文件:
Map 定義世界,Camera 決定你看見什麼。