遊戲編輯器 build 3 如何使用 File System Access API 讓使用者儲存遊戲

File System Access API 提供讀取、寫入和檔案管理功能。瞭解建構 3 如何運用這個 API。

古倫 (Ashley Gullen)
Ashley Gullen

簡介

(這篇文章也可以影片的形式提供)。

建構 3 是由 Thomas 和 Ashley Gullen 兄弟開發的遊戲編輯。針對目前遊戲編輯器的第三次疊代,我們先針對 Windows 和 NW.js 建構了這兩個版本,接著使用「[bet] 是新的瀏覽器是新的作業系統」。您可以瀏覽遊戲的展示區,或瀏覽導覽,瞭解透過編輯器開發的部分遊戲。拜網路的超能力之賜,您也可以點選任何「激發靈感」範例,立即開始編輯。

Building 3 應用程式,顯示使用者正在編輯其中一項範例專案。

建構工具 3 中的 File System Access API

建立作業提供使用 File System Access API 和雲端儲存功能 (Google 雲端硬碟、OneDrive、Dropbox),以及下載專案檔案副本的選項。根據「建築開發人員」收集到的統計資料,顯示 65% 的儲存量都是使用 File System Access API 完成,這代表了大部分客戶都希望使用這種 API。

為儲存,下列程式碼片段顯示原始實際工作環境程式碼,用於從 showSaveFilePicker() 方法取得 FileSystemFileHandle,然後用來儲存實際資料。建構時會使用 id 選項參數。您可以指定 id 欄位,建議檔案選擇器開啟的目錄。指定 id 可讓瀏覽器記住不同 ID 的不同目錄,讓瀏覽器根據 ID,以一致的方式在相同目錄中啟動對話方塊。舉例來說,層級檔案可在 Documents/levels/ 中開啟,而紋理檔案可在 Images/textures/ 中開啟。types 參數是支援的檔案類型陣列,附有本地化的使用者影像 descriptionaccept 物件,用來指示作業系統一開始只接受 MIME 類型 application/x-construct3-project.c3p 檔案。

let fileHandle = null;
try {
  fileHandle = await window["showSaveFilePicker"]({
    id: "save-project-file",
    types: [
      {
        description: lang("ui.project-file-picker.c3-single-file-project"),
        accept: {
          "application/x-construct3-project": [".c3p"],
        },
      },
    ],
  });
} catch (err) {
  // Assume user cancelled, or permission otherwise denied.
  return;
}

工程團隊發現使用者檔案系統中的檔案非常符合直覺。運作方式與傳統電腦應用程式類似,且可與其他軟體輕鬆整合。例如可備份使用者檔案的備份軟體,或是將工作輕鬆傳送至其他位置,或是使用外部工具編輯檔案。此外,他們也會將 File System Access API 用於其他各種用途,例如選取備份資料夾或匯入動畫等素材資源。

使用大型檔案和資料夾

有些 Building 的客戶處理了非常大型的專案,擁有數百 MB 的容量。儲存這麼大量的工作到單一檔案並不容易,這是單純地上傳到雲端服務。進階使用者可以透過 File System Access API 使用本機資料夾,將本機資料夾及其所有資產分別儲存在不同的檔案中。由於只有變更過的檔案需要更新,因此能快速儲存。

繼續瀏覽先前安裝的應用程式

檔案和目錄控點都可以序列化為 IndexedDB,以便「建構」功能可提供在不同工作階段持續存在的近期專案清單,方便使用者再次存取相同的檔案或資料夾,對使用者來說非常方便。事實上,建構期間所開啟的專案約有 30% 都是透過這種方式開啟。以下螢幕截圖顯示最近的兩個專案 (tetris.c3pcolumns.c3p),以及在開發人員工具視窗中 (IndexedDB 資料表中序列化的對應 FileSystemFileHandle 物件)。

「Build 3」的起始網頁包含最近的兩個專案:tetris.c3p 和 column.c3p。在底部的開發人員工具中,顯示兩個序列化為 IndexedDB 的 FileSystemFileHandle 物件。

拖曳整合

File System Access API 也整合了 Drag and Drop API,讓使用者可以將 .c3p 檔案拖曳到應用程式。接著,建構可以經由 DataTransferItem 物件上的 getAsFileSystemHandle() 方法取得 FileSystemFileHandle,這表示透過這種方式開啟的檔案可以立即編輯和儲存,而不必另外開啟另一個檔案儲存對話方塊。

淘汰的 NW.js 版本

先前該團隊的 NW.js 建構版本需要單獨維護及更新,才能存取本機檔案。在 Chromium 在第 84 版開始支援 File System Access API 後,建構開發人員在 2020 年實作這個 API,就產品個別而言,可以淘汰 NW.js 版本,並在所有平台上完全使用瀏覽器。這可以簡化開發作業,且無須將瀏覽器引擎與應用程式組合在一起。

結論

建構時應分別大量使用 showOpenFilePicker()showSaveFilePicker()showOpenDirectoryPicker() 三種 Picker 方法,讓使用者學會依賴此建構方式。此外,建構也會使用 File Handling API,這個 API 允許 建構 3 自行註冊為 .c3p 檔案的 (預設) 檔案處理常式。也就是說,使用者可以在作業系統的檔案探索工具中,透過滑鼠右鍵建立 3 個遊戲檔案,並按右鍵開啟。「建構」應用程式會使用其他新型瀏覽器 API 的載入功能,例如 WebGL、Web Audio、Web Worker、WebAssembly、多人遊戲的 WebRTC、本機字型存取、新動畫產品的 WebCodecs 等。該公司的目標是全面發揮網路平台的效益,並示範如何運用網路平台打造優質產品,因此請務必體驗導覽產品,自行打造遊戲。