【Flame 學習筆記】GameWidget 元件介紹

更新於 2024/12/01閱讀時間約 5 分鐘
raw-image
【Flame 學習筆記】系列文章目錄:連結
【Flutter 學習筆記】線上課程教學影片:連結
【Flutter 學習筆記】系列文章目錄:連結

在 Flutter 開發中,若你想要將遊戲實例嵌入到 Flutter 的 widget 樹中,GameWidget 是一個不可或缺的工具。這個 widget 不僅功能強大,還能作為你 Flutter 應用程式的根部件,讓我們一起來看看如何使用它。

基本用法

使用 GameWidget 的最簡單方式如下:

void main() {
runApp(
GameWidget(game: MyGame()),
);
}

這段程式碼展示了如何將 MyGame 的實例傳遞給 GameWidget,並將其作為應用程式的根部件。值得注意的是,GameWidget 也可以被嵌入到 widget 樹的任意深度,這意味著在同一個應用程式中可以有多個 GameWidget 實例。

佈局行為

GameWidget 的佈局行為是自動擴展以填滿所有可用空間。因此,當它作為根部件使用時,應用程式將會全螢幕顯示;而在其他佈局 widget 中使用時,它也會盡可能佔用空間。

結構支援功能

除了承載遊戲實例外,GameWidget 還提供了一些結構支援功能,包括:

  • loadingBuilder:在遊戲加載時顯示的 widget。
  • errorBuilder:當遊戲發生錯誤時顯示的 widget。
  • backgroundBuilder:在遊戲後面繪製裝飾的 widget。
  • overlayBuilderMap:在遊戲上方繪製一個或多個 widget。

需要注意的是,GameWidget 不會裁剪其畫布的內容,這意味著遊戲可能會在邊界外繪製(這取決於使用的相機)。如果不希望這樣,可以考慮將 widget 包裝在 Flutter 的 ClipRect 中。

建構子

GameWidget 提供了兩個建構子:

  1. GameWidget:用於渲染提供的遊戲實例。
    GameWidget({required this.game, ...})
  2. GameWidget.controlled:這個建構子會創建並擁有一個遊戲實例,使用提供的 gameFactory
    GameWidget.controlled({required this.gameFactory, ...})

這個建構子特別適合當你想將 GameWidget 放入另一個 widget 中,但又不想自己儲存遊戲實例的情況。例如:

class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.all(20),
child: GameWidget.controlled(
gameFactory: MyGame.new,
),
);
}
}

屬性介紹

  • game:要渲染的遊戲實例,若使用 controlled 建構子則為 null。
  • gameFactory:創建遊戲的函數。
  • textDirection:遊戲中文字元素的方向。
  • loadingBuilder:加載時顯示的 widget,預設為空的 Container。
  • errorBuilder:加載過程中出現錯誤時顯示的 widget。
  • backgroundBuilder:在遊戲元素和背景顏色之間構建的 widget 樹。
  • overlayBuilderMap:可在遊戲表面上顯示的 widget 集合。
  • initialActiveOverlays:遊戲啟動時顯示的 overlay 列表。
  • focusNode:控制遊戲焦點的 FocusNode。
  • autofocus:遊戲掛載後是否請求焦點,預設為 true。
  • mouseCursor:當鼠標懸停在遊戲畫布上時的鼠標形狀。
  • addRepaintBoundary:遊戲是否應該假設 RepaintBoundary 的行為,預設為 true。
avatar-img
11會員
243內容數
哈囉!歡迎光臨我的沙龍!我是 KT,一位對應用程式開發充滿熱情的開發者。在這個專屬空間,我將與您分享我在應用開發領域的深入學習心得和豐富的實戰經驗。如果您對應用程式開發技術同樣充滿好奇,渴望不斷探索新知,歡迎成為我們的會員,一起在應用程式開發的旅途上,探索更深層次的技術世界,享受學習的樂趣。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
HKT實驗室 的其他內容
本文介紹 Flame 遊戲引擎建議的專案結構包含標準的 Flutter 資源目錄,並新增音效(audio)、圖片(images)和磚塊(tiles)子目錄。開發者需在 pubspec.yaml 中註冊資源,並可選擇自訂資源結構,使用 AssetsCache 和 Images 來管理資源位置。
本文介紹了 Flame,一款基於 Flutter 的開源遊戲引擎,支持多平台運行(行動裝置、桌面和網頁)。雖然不如 Unity 和 Unreal 知名,但對於熟悉 Flutter 的開發者來說,學習 Flame 是值得的。本文是筆者在學習 Flame 官方文檔過程中的筆記,旨在幫助有興趣的學習者。
本文介紹 Flame 遊戲引擎建議的專案結構包含標準的 Flutter 資源目錄,並新增音效(audio)、圖片(images)和磚塊(tiles)子目錄。開發者需在 pubspec.yaml 中註冊資源,並可選擇自訂資源結構,使用 AssetsCache 和 Images 來管理資源位置。
本文介紹了 Flame,一款基於 Flutter 的開源遊戲引擎,支持多平台運行(行動裝置、桌面和網頁)。雖然不如 Unity 和 Unreal 知名,但對於熟悉 Flutter 的開發者來說,學習 Flame 是值得的。本文是筆者在學習 Flame 官方文檔過程中的筆記,旨在幫助有興趣的學習者。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
Thumbnail
這篇內容,將會講解什麼是表達式(Expression),什麼是陳述式(Statement)。有了這些概念,各位會更容易理解,要如何設計程式碼。
Thumbnail
這篇內容,將會講解什麼是方法,以及與方法相關的知識。包括定義Method、Method Variable 方法變數、跨區使用Method、使用函式時要注意括號。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
這篇內容,將會用一個簡單的範例,來解釋物件(Object)和實體(Instance)的差別。包括Instance的簡介、ID、物件改變會影響實體。
Thumbnail
這篇內容,將簡單介紹Asset Browser、Workspace、Inspector、Code Browser,作為入門的介面導覽。
Thumbnail
這篇內容,將教你如何開啟新的GameMaker專案,並調整畫面佈局。也會講解,為何建議用英文語系,來進行遊戲開發。
Thumbnail
這篇內容,將教你如何安裝GameMaker,並更改語言設定。包括GameMaker的下載說明、版本說明、安裝說明、語系更改。
Thumbnail
# 簡介 身為一位專注於 Vue.js 的前端開發者,這是我第一次嘗試構建 Flutter 網頁應用。讓我們開始吧! ## 第一次嘗試 ### 第一步:創建一個 Flutter 應用 首先,通過運行以下命令來創建一個新的 Flutter 項目: ```sh flutter
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
Thumbnail
這篇內容,將會講解什麼是表達式(Expression),什麼是陳述式(Statement)。有了這些概念,各位會更容易理解,要如何設計程式碼。
Thumbnail
這篇內容,將會講解什麼是方法,以及與方法相關的知識。包括定義Method、Method Variable 方法變數、跨區使用Method、使用函式時要注意括號。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
這篇內容,將會用一個簡單的範例,來解釋物件(Object)和實體(Instance)的差別。包括Instance的簡介、ID、物件改變會影響實體。
Thumbnail
這篇內容,將簡單介紹Asset Browser、Workspace、Inspector、Code Browser,作為入門的介面導覽。
Thumbnail
這篇內容,將教你如何開啟新的GameMaker專案,並調整畫面佈局。也會講解,為何建議用英文語系,來進行遊戲開發。
Thumbnail
這篇內容,將教你如何安裝GameMaker,並更改語言設定。包括GameMaker的下載說明、版本說明、安裝說明、語系更改。
Thumbnail
# 簡介 身為一位專注於 Vue.js 的前端開發者,這是我第一次嘗試構建 Flutter 網頁應用。讓我們開始吧! ## 第一次嘗試 ### 第一步:創建一個 Flutter 應用 首先,通過運行以下命令來創建一個新的 Flutter 項目: ```sh flutter