当前位置: 首页 > news >正文

Godot4,多窗口显示同场景实现方式

大概半年前大一学godot时在油管学到的,快忘光了用AI回忆了下分享出来,如有不足请在评论区指出。

本文章内容可用于实现在多个独立窗口中显示同一场景的不同区域

稍作修改也可让各个窗口动起来


一、最终效果预览

  • 仅显示子窗口,窗口大小位置可由检查器或脚本控制
  • 两个窗口共享同一个 2D 世界,相机随窗口位置实时联动

二、场景节点结构

节点结构如下:

Node(挂载全局脚本) ├─ Window(子1窗口,内置 Camera2D) ├─ Window2(子2窗口,内置 Camera2D)(可添加更多子窗口) └─ Node2D(存放所有游戏实体:角色、地面、碰撞等)(建议用单独的场景)
  • 每个窗口节点下挂载一个Camera2D节点控制窗口显示区域

三、根节点 Node 脚本

负责窗口初始化、透明配置、多窗口世界同步、尺寸限制。

extends Node @onready var _MainWindow: Window = get_window() @onready var _SubWindow: Window = $Window @export var player_size: Vector2i = Vector2i(32, 32) func _ready(): # 多窗口共享同一个2D世界 $Window.world_2d = _MainWindow.world_2d $Window2.world_2d = _MainWindow.world_2d #可以在此处添加更多子窗口 # 开启逐像素透明 ProjectSettings.set_setting("display/window/per_pixel_transparency/allowed", true) # 主窗口(底图)基础配置 _MainWindow.borderless = true #去边框和标题栏 _MainWindow.unresizable = true #禁止缩放主窗口 _MainWindow.always_on_top = true #窗口保持置顶 _MainWindow.gui_embed_subwindows = false #子窗口转为系统原生窗口,可独立移动 _MainWindow.transparent = true #允许窗口透明 _MainWindow.transparent_bg = true #去掉默认的灰色背景 (虽然有时候还是会在,建议底图用一张纯色填充) # 突破系统最小窗口限制(没有的话会只显示作为底图的全场景) _MainWindow.min_size = player_size _MainWindow.size = _MainWindow.min_size

四、Window / Window2 窗口脚本

用来控制子窗口的显示与挪动窗口的同步

extends Window @onready var _Camera: Camera2D = $Camera2D var last_position = Vector2i.ZERO var velocity = Vector2i.ZERO func _ready() -> void: # 相机锚点固定左上角,使窗口坐标与相机坐标直接对齐 _Camera.anchor_mode = Camera2D.ANCHOR_MODE_FIXED_TOP_LEFT # 设为附属窗口,主窗口关闭时自动销毁 transient = true # 关闭请求时释放节点 close_requested.connect(queue_free) func _process(delta: float) -> void: # 计算窗口移动速度 velocity = position - last_position last_position = position # 相机跟随窗口移动 _Camera.position = get_camera_pos_from_window() func get_camera_pos_from_window() -> Vector2i: return position + velocity

五、关键配置说明

  1. 透明窗口生效条件

    • 项目设置开启:显示 → 窗口 → 模式 → Fullscreen
    • 显示 → 窗口→嵌入式子窗口→取消勾选
    • 右上角兼容改成Forward+
  2. 子窗口可独立拖动必须设置:

    _MainWindow.gui_embed_subwindows = false

    否则子窗口会嵌入主窗口,无法拖动。

  3. 相机视角同步Camera2D锚点设为FIXED_TOP_LEFT,保证窗口位置与相机位置直接映射。


六、结语

当初找了很久也没找到在文章里详细解释的实现方法,现在想起来了就顺手做个分享,第一次写博客应该会有许多不足,请多指正,之后更新应该会去记录在学习游戏开发中实现的功能,感谢你的耐心阅读。

http://www.jsqmd.com/news/670372/

相关文章:

  • 顶顶通AICC打断设置
  • WarcraftHelper终极指南:5分钟让魔兽争霸3在现代电脑上焕发新生
  • 选购无锡瑞之顺,它的生产效率和客户评价究竟如何 - 工业品牌热点
  • 202106-nuPlan:面向自动驾驶汽车的闭环机器学习规划基准
  • 剖析售后完善的雪糕冰淇淋厂家,靠谱品牌价格多少钱 - 工业品牌热点
  • 如何在5分钟内免费创建专业EPUB电子书:EPubBuilder终极指南
  • 2026奇点智能技术大会前瞻(AGI原生编程能力白皮书首次泄露)
  • 终极指南:3分钟搞定QQ音乐加密文件转换,qmcdump让你轻松享受无损音乐
  • 小红书关键词批量提取评论使用说明分享
  • 如何快速备份微信聊天记录:终极完整导出指南
  • 场景实战:教育机构如何用AI人脸隐私卫士保护学生隐私?完整操作指南
  • 抖音批量下载神器:3步搞定视频素材库,效率提升500%
  • ncmdumpGUI:网易云音乐NCM文件解密与音频格式转换的专业解决方案
  • 终极指南:如何用Zotero-GPT插件让AI帮你处理海量文献
  • 浏览器禁用 JavaScript 无法使用 x.com?启用或换浏览器,禁用隐私扩展再试!
  • spacedesk平板与电脑连接的几个问题解决
  • 求助!哑铃型制样机哪家口碑好?主要是做材料检测,对精度要求比较高。 - 品牌推荐大师
  • 3大核心功能+5分钟上手:Lumafly让你的空洞骑士模组管理轻松又高效
  • Proteus仿真LM324波形发生器时,你的三角波为什么变成了正弦波?聊聊运放电路的频率响应与失真
  • 如何分析Data Guard的网络瓶颈_Bandwidth与Redo传输速率的计算公式
  • OpenClaw中文版教程:nanobot gateway服务启动失败常见原因与修复方案
  • WarcraftHelper终极指南:三步解决魔兽争霸III现代系统兼容性问题
  • 二叉搜索树(BST)与哈夫曼树(HFM)
  • EasyAnimateV5在电商场景落地:商品图秒变营销短视频的完整工作流
  • 3步搞定城通网盘加速:新手也能轻松掌握的下载黑科技
  • 基于SpringBoot + Vue的基于Web的跳蚤市场管理系统
  • 2026年玻璃隔断厂家推荐,教你如何选择性价比高的品牌 - 工业品网
  • 【总结】手写实现JS常见核心的概念
  • Dubbo 超时机制与集群容错机制详解:防止雪崩的利器
  • 2026年降AI收藏指南:高效解决毕业论文AI率太高问题 - 降AI实验室