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

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

簡介

(這篇文章也有影片版本)。

Construct 3Thomas 和 Ashley Gullen兄弟開發的遊戲編輯器。針對目前第三版的遊戲編輯器,這兩個版本在先前為 Windows 和 NW.js 建構後,就已完全「將瀏覽器視為新作業系統」。你可以瀏覽展示模式或觀看導覽,體驗使用編輯器開發的部分遊戲。多虧了網路的強大功能,你也可以直接點選任何「獲得靈感」範例,立即開始編輯。

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

File System Access API 的建構步驟 3

建構提供選擇透過 File System Access API 儲存至本機檔案、儲存在雲端 (Google 雲端硬碟、OneDrive、Dropbox),以及下載專案檔案副本。根據 Construct 開發人員收集到的統計資料,65% 的儲存作業都是使用 File System Access API 完成,這表示這是大多數客戶想要使用的 API。

如要儲存資料,請參閱下列程式碼片段,瞭解如何從 showSaveFilePicker() 方法取得 FileSystemFileHandle,然後儲存實際資料。建構函式會使用 id 選項參數。您可以指定 id 欄位,建議開啟檔案選擇器的目錄。指定 id 後,瀏覽器就能記住不同 ID 的不同目錄,並根據 ID 在相同目錄中一致地啟動對話方塊。舉例來說,您可以在 Documents/levels/ 中開啟層級檔案,而在 Images/textures/ 中開啟紋理檔案。types 參數是支援的檔案類型陣列,其中包含經過本地化的使用者視覺化 description,以及 accept 物件,可告知作業系統一開始只接受 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 執行其他用途,例如選取備份資料夾或匯入動畫等資產。

使用大型檔案和資料夾

Construct 的部分客戶會處理數百 MB 的大型專案。將這麼大量的工作儲存至單一檔案的速度會非常緩慢,更不用說上傳至雲端服務。File System Access API 可讓進階使用者在本機資料夾中處理所有資產,並將資產存放在不同的檔案中。這樣一來,系統只需要更新已變更的檔案,就能快速儲存內容。

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

檔案和目錄控制代碼都能序列化為 IndexedDB,讓 build 提供在整個工作階段中持續存在的近期專案清單,讓使用者能再次存取相同的檔案或資料夾,因此對使用者來說非常實用。事實上,在 build 中開啟的所有專案中,約有 30% 是以這種方式開啟。下圖顯示兩個近期專案:tetris.c3pcolumns.c3p,以及在 DevTools 視窗中,對應的 FileSystemFileHandle 物件在 IndexedDB 表格中序列化。

Construct 3 的首頁,其中包含兩個最近的專案:tetris.c3p 和 columns.c3p。在底部的開發人員工具中,顯示已序列化至 IndexedDB 的兩個 FileSystemFileHandle 物件。

拖曳整合

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

已淘汰的 NW.js 版本

先前,團隊有一個 NW.js 版本的 Construct,需要另外維護及更新才能存取本機檔案。在 Chromium 於第 84 版中新增對 File System Access API 的支援後,Construct 開發人員在 2020 年實作 API,並因此能夠淘汰 NW.js 建構,並在所有平台上專門使用瀏覽器。這可簡化開發作業,不必將瀏覽器引擎與應用程式封裝在一起。

結論

Construct 會大量使用三種 showOpenFilePicker()showSaveFilePicker()showOpenDirectoryPicker() 挑選器方法,以便使用者學會如何透過這種方式使用 Construct。另外,Construct 也使用 File Handling API,可讓 Construct 3 將自身註冊為 .c3p 檔案的 (預設) 檔案處理常式。也就是說,使用者可以直接在作業系統的檔案總管中,按兩下或按一下滑鼠右鍵,使用 Construct 3 開啟遊戲檔案。Construct 完全著重於網路,因此使用許多其他新式瀏覽器 API,例如 WebGL、Web Audio、Web Workers、WebAssembly、WebRTC (用於多人遊戲)、Local Font Access、WebCodecs (用於新動畫產品) 等等。他們的目標一直是充分運用網路平台,並展示如何在該平台上建立出色的產品,因此請務必試試他們的導覽功能,並自行建立遊戲。