【Godot】Window類

(參考自deepseek回答)
在 Godot 引擎中,Window 是一個用于管理應用程序窗口的類。它是 Godot 4.0 引入的新特性,取代了舊版本中的 OS 類對窗口的管理功能。Window 提供了對窗口大小、位置、標題、模式等屬性的控制,使開發者能夠更靈活地管理應用程序的窗口。


1. Window 的定義

  • Window 繼承自 Viewport,因此它也是一個渲染容器。
  • 它代表應用程序的一個窗口,可以包含 2D 或 3D 場景。
  • 每個 Godot 應用程序至少有一個主窗口(root Window),但可以創建多個窗口。

2. Window 的核心功能

  1. 窗口屬性控制

    • 控制窗口的大小、位置、標題、模式(如全屏、無邊框等)。
  2. 多窗口支持

    • 支持創建和管理多個窗口,每個窗口可以獨立運行。
  3. 事件處理

    • 處理窗口相關的事件(如窗口大小改變、焦點改變等)。
  4. 渲染管理

    • 作為 Viewport 的子類,Window 可以包含場景并管理渲染。

3. Window 的常見用途

  1. 主窗口管理

    • 控制應用程序的主窗口屬性(如大小、標題、全屏模式等)。
  2. 多窗口應用

    • 創建多個窗口,用于實現多任務界面或分屏功能。
  3. 自定義窗口樣式

    • 實現無邊框窗口、透明窗口等自定義樣式。
  4. 窗口事件處理

    • 監聽窗口事件(如窗口關閉、最小化等),并執行相應邏輯。

4. Window 的常用屬性和方法

屬性/方法說明
size窗口的大小(寬度和高度)。
position窗口的位置(屏幕坐標)。
title窗口的標題。
mode窗口的模式(如全屏、無邊框等)。
visible窗口的可見性。
current_screen窗口所在的屏幕索引(用于多顯示器環境)。
always_on_top窗口是否始終置頂。
set_size()設置窗口的大小。
set_position()設置窗口的位置。
set_title()設置窗口的標題。
set_mode()設置窗口的模式。
show()顯示窗口。
hide()隱藏窗口。
close()關閉窗口。

5. Window 的使用示例

示例 1:設置主窗口屬性
extends Nodefunc _ready():var main_window = get_tree().rootmain_window.title = "My Game"main_window.size = Vector2(1280, 720)main_window.position = Vector2(100, 100)main_window.mode = Window.MODE_WINDOWED
示例 2:創建新窗口
extends Nodefunc _ready():var new_window = Window.new()new_window.title = "New Window"new_window.size = Vector2(800, 600)new_window.position = Vector2(200, 200)new_window.mode = Window.MODE_WINDOWEDadd_child(new_window)var scene = load("res://MyScene.tscn").instance()new_window.add_child(scene)
示例 3:監聽窗口事件
extends Windowfunc _ready():connect("close_requested", self, "_on_close_requested")connect("size_changed", self, "_on_size_changed")func _on_close_requested():print("Window is closing!")hide()  # 隱藏窗口而不是關閉func _on_size_changed():print("Window size changed:", size)

6. Window 的注意事項

  1. 主窗口

    • 主窗口可以通過 get_tree().root 獲取。
    • 主窗口的關閉行為可以通過 close_requested 信號自定義。
  2. 多窗口管理

    • 創建多個窗口時,需要手動管理它們的生命周期(如關閉、釋放資源等)。
  3. 跨平臺兼容性

    • 某些窗口屬性(如無邊框模式、透明窗口)可能在不同平臺上表現不同,需要測試和適配。
  4. 性能開銷

    • 每個窗口都會占用額外的系統資源,盡量減少不必要的窗口創建。

7. Window 的進階用法

無邊框窗口
extends Windowfunc _ready():mode = Window.MODE_BORDERLESSposition = Vector2(100, 100)size = Vector2(800, 600)
透明窗口
extends Windowfunc _ready():mode = Window.MODE_TRANSPARENTposition = Vector2(100, 100)size = Vector2(800, 600)set_clear_color(Color(0, 0, 0, 0))  # 設置透明背景
窗口拖拽
extends Windowvar dragging = false
var drag_start_position = Vector2()func _input(event):if event is InputEventMouseButton:if event.button_index == BUTTON_LEFT:if event.pressed:dragging = truedrag_start_position = event.positionelse:dragging = falseelif event is InputEventMouseMotion and dragging:position += event.position - drag_start_position

總結

Window 是 Godot 4.0 中用于管理應用程序窗口的核心類,提供了對窗口大小、位置、標題、模式等屬性的控制。通過 Window,開發者可以實現多窗口應用、自定義窗口樣式以及處理窗口事件等功能。它是構建現代 GUI 應用程序和游戲的重要工具。

在游戲中,Window(窗口)可以呈現為多種不同的事物,具體取決于游戲的設計和需求。以下是一些常見的應用場景和表現形式:

還有一個問題:這個所謂的窗口,在游戲里具體指什么?
以下是回答:


1. 游戲的主窗口

  • 表現形式:游戲的主界面,通常是玩家與游戲交互的主要區域。
  • 用途
    • 顯示游戲畫面(2D 或 3D)。
    • 包含游戲的核心邏輯和渲染內容。
  • 示例
    • 一個 2D 平臺游戲的主窗口顯示游戲關卡和角色。
    • 一個 3D 射擊游戲的主窗口顯示 3D 場景和玩家視角。

2. 彈出窗口

  • 表現形式:臨時顯示的窗口,通常用于提示、菜單或對話框。
  • 用途
    • 顯示游戲內的通知(如“游戲暫停”、“任務完成”)。
    • 提供選項菜單(如設置、保存、退出)。
  • 示例
    • 游戲暫停時彈出的菜單窗口。
    • 任務完成時顯示的獎勵窗口。

3. 分屏窗口

  • 表現形式:將屏幕分割為多個區域,每個區域顯示不同的內容。
  • 用途
    • 支持多人游戲(如雙人分屏)。
    • 顯示多個視角(如賽車游戲中的后視鏡)。
  • 示例
    • 雙人合作游戲中的上下分屏。
    • 賽車游戲中的后視鏡或小地圖窗口。

4. 畫中畫窗口

  • 表現形式:在主窗口中嵌入一個小窗口,顯示額外的內容。
  • 用途
    • 顯示監控畫面(如安全攝像頭)。
    • 顯示小地圖或角色狀態。
  • 示例
    • 在 RPG 游戲中顯示小地圖的窗口。
    • 在策略游戲中顯示資源統計的窗口。

5. 自定義 UI 窗口

  • 表現形式:游戲內的自定義用戶界面,通常用于顯示信息或提供交互。
    - 用途
    • 顯示角色屬性、背包、技能樹等。
    • 提供商店、任務日志等界面。
  • 示例
    • RPG 游戲中的角色狀態窗口。
    • 模擬經營游戲中的商店窗口。

6. 調試窗口

  • 表現形式:開發者使用的窗口,通常用于調試和測試。
  • 用途
    • 顯示調試信息(如幀率、日志、變量值)。
    • 提供調試工具(如場景編輯器、控制臺)。
  • 示例
    • 顯示當前幀率和內存使用情況的窗口。
    • 用于測試游戲功能的控制臺窗口。

7. 多窗口應用

  • 表現形式:游戲使用多個獨立窗口,每個窗口顯示不同的內容。
  • 用途
    • 實現復雜的 UI 布局(如編輯器、多任務界面)。
    • 支持多顯示器環境。
  • 示例
    • 游戲編輯器中的多個工具窗口。
    • 在多顯示器環境中,將游戲畫面和 UI 分開顯示。

8. 全屏和窗口化模式

  • 表現形式游戲可以在全屏或窗口化模式下運行。(?)
  • 用途
    • 提供更好的沉浸感(全屏模式)。
    • 支持多任務操作(窗口化模式)。
  • 示例
    • 玩家可以在設置中選擇全屏或窗口化模式。
    • 窗口化模式下,游戲窗口可以拖動和調整大小。

9. 透明窗口

  • 表現形式:窗口背景透明,只顯示特定內容。
  • 用途
    • 實現特殊的 UI 效果(如半透明菜單)。
    • 創建自定義的 HUD(抬頭顯示)。
  • 示例
    • 游戲中的半透明任務提示窗口。
    • 自定義的 HUD 顯示角色生命值和技能冷卻時間。

10. 無邊框窗口

  • 表現形式:窗口沒有邊框和標題欄,通常用于自定義界面。
  • 用途
    • 創建沉浸式的游戲界面。
    • 實現自定義的窗口樣式。
  • 示例
    • 游戲中的自定義主菜單界面。
    • 模擬器或工具類游戲中的無邊框窗口。

總結

在游戲中,Window 可以呈現為多種形式,包括主窗口、彈出窗口、分屏窗口、畫中畫窗口、自定義 UI 窗口等。它的具體表現形式取決于游戲的設計需求,可以用于顯示游戲畫面、提供交互界面、支持多人游戲、實現調試功能等。通過靈活使用 Window,開發者可以創建豐富多樣的游戲體驗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72437.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72437.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72437.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JVM 2015/3/15

定義:Java Virtual Machine -java程序的運行環境(java二進制字節碼的運行環境) 好處: 一次編寫,到處運行 自動內存管理,垃圾回收 數組下標越界檢測 多態 比較:jvm/jre/jdk 常見的JVM&…

git submodule

git submodule git submodule 的作用是將一個 git 倉庫,最為另一個 git 倉庫的子模塊 比如 A 倉庫地址:gitgithub.com:xxxxxxx/A.git B 倉庫地址:gitgithub.com:xxxxxxx/B.git 一、克隆 A 倉庫 打開拉取的 A 項目根目錄 在 A 項目中添加 …

Compose 實踐與探索九 —— DrawModifier 解析

本篇講解 DrawModifier 的基本用法與代碼原理,介紹原理的目的在于可以判斷繪制與繪制的關系,繪制與布局的關系。知道達成某種繪制效果應該怎么寫,面對復雜的 Modifier 鏈時對效果有大致預判。 DrawModifier 管理繪制,需要以負責管…

華為手機助手輸入連接碼時光標亂跳

問題復現:輸入12345678,光標自動跳轉導致連接碼出現亂序情況。 千萬別試著找出規律,已試動態規律非大牛誤輕試 問題原因: 想啥呢?華哥的軟件又不是我開發我要Know Why干啥 我只需關心解決方案 (可能時輸入…

《DeepSeek 開源 DeepGEMM:開啟AI計算新時代的密鑰》:此文為AI自動生成

《DeepSeek 開源 DeepGEMM:開啟AI計算新時代的密鑰》:此文為AI自動生成 引言:AI 計算的新曙光 在當今科技飛速發展的時代,人工智能(AI)無疑是最為耀眼的領域之一。從語音助手到自動駕駛,從圖像…

Windows 11 安裝Docker Desktop環境

1、確認CPU開啟虛擬化 打開任務管理器,切換到“性能”選項卡,查看 CPU 信息。若“虛擬化”狀態顯示為“已啟用”,則表示虛擬化已開啟;若顯示為“已禁用”,則需要在啟動時進入 BIOS 開啟虛擬化設置(若顯示已…

STM32如何精準控制步進電機?

在工業自動化、機器人控制等場合,步進電機以其高精度、開環控制的特性得到了廣泛應用。而在嵌入式系統中,使用STM32進行步進電機的精確控制,已成為開發者的首選方案之一。 本文將從嵌入式開發者的角度,深入探討如何基于STM32 MCU…

【 <一> 煉丹初探:JavaWeb 的起源與基礎】之 JavaWeb 項目的部署:從開發環境到生產環境

<前文回顧> 點擊此處查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、開發環境…

深度學習CNN特征提取與匹配

?一、CNN特征提取核心方法? ?基礎網絡架構? 使用卷積神經網絡&#xff08;如ResNet、VGG、MobileNet&#xff09;提取多層特征圖&#xff0c;通過卷積層自動學習圖像的局部紋理、形狀及語義信息?。 ?淺層特征?&#xff1a;邊緣、角點等低級特征&#xff08;Conv1-3&…

Vuex 高級技巧與最佳實踐

使用 map 輔助函數簡化代碼&#xff1a; javascript import { mapState, mapGetters } from vuexexport default {computed: {...mapState([num]),...mapGetters([doubleNum])} }模塊化開發&#xff1a; javascript // modules/student.js export default {namespaced: true,st…

算法題(98):大數加法

審題&#xff1a; 本題需要我們解決大數加法&#xff0c;大數直接運算會超出范圍&#xff0c;所以我們需要轉換成字符串一位位進行計算 思路&#xff1a; 方法一&#xff1a;高精度加法 我們將兩個大數的每一個位分別計算&#xff0c;然后頭插到answer字符串中即可 解題&#x…

C# Exe + Web 自動化 (BitComet 綠燈 自動化配置、設置)

BitComet GreenLight,內網黃燈轉綠燈 (HighID), 增加p2p連接率提速下載-CSDN博客 前兩天寫個這個&#xff0c;每次開機關機后要重來一遍很麻煩的索性寫個自動化。 先還是按照上面的教程自己制作一遍&#xff0c;留下Luck 以及 路由器相關的 端口記錄信息。 &#xff08;因為自…

基于 Docker 搭建 FRP 內網穿透開源項目

有些配置項不知道該不該用,不知道該在哪用,不知道怎么用,所以我自己寫個文章簡單記錄一下做個筆記 本文介紹的是基于 Docker 運行 frps 和 frpc,并通過 TCP 協議簡單穿透 SSH 和 HTTP,在觀看本文之前請確保你的機器已經安裝 Docker 服務端搭建 frps# 連接擁有公網 IP 的…

python---序列 (str,list,tuple)

一、 序列類型入門 python的數據類型&#xff1a;int float bool str 運算符 - * / % > < and or not 流程控制ifelsewhilefor掌握python的2大容器類型數值類型&#xff08;3個&#xff09;&#xff1a;int float bool序列類型容器(3個)&#xff1a;str &#xff1a; …

CSS元素層疊順序規則

CSS元素層疊順序規則 看圖說話總結: background/borderz-index(<0)blockfloatinline/inline-blockz-index(0,auto)z-index (>0)

刪除有序數組中的重復項(26)

26. 刪除有序數組中的重復項 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; class Solution { public:int removeDuplicates(vector<int>& nums) {auto first nums.begin();auto last nums.end();auto result first;if (first last) {return std::…

Vue 概念、歷史、發展和Vue簡介

一、Vue概念 官方定義&#xff1a; 漸進式JavaScript 框架&#xff0c;易學易用&#xff0c;性能出色&#xff0c;適用場景豐富的 Web 前端框架。 Vue.js 是一個流行的前端JavaScript框架&#xff0c;由尤雨溪&#xff08;Evan You&#xff09;開發并維護。 它最初于2014年發…

ArcGIS Pro將有文字標注底圖切換為無標注底圖(在線地圖圖源)

今天介紹一下在ArcGIS Pro將有標注的地形底圖換成無標注的底圖。 大家在這項目底圖時候會經常調用ArcGIS Pro自帶的地形圖&#xff0c;但是這個地形圖自帶是有注記的&#xff0c;如下圖。 如何更改&#xff0c;才可以調用無文字注記的呢&#xff1f; 對于一個已經切好圖的有注記…

Xxl-Job學習筆記

目錄 概述 核心架構 核心特點 應用場景 什么是任務調度 快速入門 獲取源碼 初始化調度數據庫 基本配置 數據源datasource 郵箱email&#xff08;可選&#xff09; 會話令牌access token 啟動調度中心 啟動執行器 依賴 yaml基本配置 XxlJobConfig類配置 定義執…

讓雙向鏈表不在云里霧里

又來博客留下我的足跡了&#xff0c;哈哈哈&#xff0c;這次是對于雙向鏈表的理解 目錄 創建雙向鏈表&#xff1a; 申請結點&#xff1a; 雙向鏈表初始化&#xff1a; 雙向鏈表插入結點&#xff1a; 雙向鏈表刪除結點&#xff1a; 雙向鏈表的打印&#xff1a; 雙向鏈表…