You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Godot实现双屏双窗口运行?适配触屏与4K屏场景

Godot双屏(触屏输入+4K显示)配置方案

方案一:多独立窗口实现(推荐)

直接创建两个独立窗口,分别绑定触屏和4K屏幕,各自负责输入和显示。

1. 开启多窗口支持

打开项目设置,导航到Display > Window > Multi-Window,勾选Allow Multiple Windows选项,允许项目创建多个窗口。

2. 代码创建并配置副屏窗口

在主场景的脚本中(比如主节点的_ready()函数),添加以下代码创建并配置第二窗口:

extends Node2D

var secondary_window: Window

func _ready():
    # 初始化副屏窗口
    secondary_window = Window.new()
    secondary_window.title = "4K结果显示窗口"
    
    # 指定窗口绑定到第二块屏幕(屏幕索引从0开始,主触屏为0,副屏为1)
    # 可通过DisplayServer.get_screen_count()获取屏幕总数,避免硬编码
    secondary_window.screen = 1
    
    # 设置副屏窗口为全屏(或指定4K分辨率)
    secondary_window.fullscreen = true
    # 若不需要全屏,可手动设置尺寸:secondary_window.size = Vector2(3840, 2160)
    
    # 创建副屏窗口的根Viewport
    var secondary_viewport = Viewport.new()
    secondary_viewport.size = secondary_window.size
    secondary_window.add_child(secondary_viewport)
    
    # 加载并实例化副屏显示场景(替换为你的结果显示场景路径)
    var display_scene = load("res://ResultDisplay.tscn").instance()
    secondary_viewport.add_child(display_scene)
    
    # 显示副屏窗口
    secondary_window.visible = true
  • 主窗口默认绑定主触屏屏幕,直接在主场景中开发输入界面即可,输入事件会被主窗口自动接收。
  • 若需要区分输入来源,可通过InputEvent的window属性判断事件来自哪个窗口。

方案二:单窗口跨双屏+双Viewport(备选方案)

强制窗口覆盖双屏,通过两个Viewport分别渲染输入界面和结果内容。

1. 配置跨屏窗口

  • 打开项目设置,进入Display > Window > Size,设置Window Size为双屏总分辨率(例如触屏1920x1080 + 4K屏3840x2160,总尺寸设为5760x2160)。
  • 勾选Fullscreen选项,或在代码中强制全屏跨屏:
func _ready():
    # 设置窗口尺寸为双屏总分辨率
    get_tree().root.size = Vector2(5760, 2160)
    # 让窗口跨所有屏幕显示
    get_tree().root.window.screen = -1
    get_tree().root.window.fullscreen = true

2. 创建双Viewport与Camera

在主场景中添加两个Viewport节点,分别对应输入和显示区域:

  • InputViewport:设置尺寸为触屏分辨率(如1920x1080),位置设为(0, 0),加载输入界面场景作为其子节点,并添加Camera2D(或Camera3D)节点绑定该Viewport。
  • DisplayViewport:设置尺寸为4K分辨率(3840x2160),位置设为(1920, 0),加载结果显示场景作为其子节点,同样添加对应Camera节点。

3. 输入事件映射

如果需要精准处理触屏输入,可通过以下方式将全局坐标映射到InputViewport的局部坐标:

func _input(event: InputEvent):
    if event is InputEventScreenTouch or event is InputEventScreenDrag:
        var local_pos = $InputViewport.get_canvas_transform().affine_inverse() * event.position
        # 将local_pos传递给输入界面的交互逻辑

注意事项

  • 屏幕索引和分辨率可通过DisplayServerAPI动态获取:DisplayServer.get_screen_size(screen_idx)、DisplayServer.get_screen_count(),避免硬编码适配不同硬件。
  • 打包导出时,多窗口方案需在导出设置中确认Allow Multiple Windows已勾选;单窗口方案需设置正确的窗口尺寸。

内容的提问来源于stack exchange,提问作者Stephane Rainville

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:45:26