Godot画面拉伸异常怎么办?怎么修复?

文章导读
在 Godot 中,当窗口模式(Window Mode)设置为 Windowed 时,如果拉伸模式(Stretch Mode)设置为 Canvas Items 并且比例(Aspect Ratio)设置为 Keep,那么即使你最大化窗口,游戏内容也不会进行缩放。而当你将窗口模式改为 Maximized 或其他模式时,缩放行为却变得正常。这看似是一个奇怪的行为,但实际上与 Godot 的窗口管理机制和
📋 目录
  1. 解决方案一:修改项目设置
  2. 解决方案二:使用代码动态调整
  3. 解决方案三:处理窗口大小变化信号
  4. 常见修复方法
  5. 另一个修复方式
  6. 测试确认
A A

在 Godot 中,当窗口模式(Window Mode)设置为 Windowed 时,如果拉伸模式(Stretch Mode)设置为 Canvas Items 并且比例(Aspect Ratio)设置为 Keep,那么即使你最大化窗口,游戏内容也不会进行缩放。而当你将窗口模式改为 Maximized 或其他模式时,缩放行为却变得正常。这看似是一个奇怪的行为,但实际上与 Godot 的窗口管理机制和拉伸逻辑有关。以下是详细原因和解决方案:Windowed 模式下的窗口大小限制 拉伸模式(Stretch Mode)的优先级 Maximized 模式与 Windowed 模式的差异 为了确保在 Windowed 模式下也能正确实现拉伸效果,你可以按照以下步骤进行配置和修改:get_window().set_size(Vector2(800, 600)) 如果有,请将其注释掉或修改为动态获取屏幕大小。4. 使用脚本动态设置窗口大小(可选)

解决方案一:修改项目设置

打开 Project Settings > Display > Window。 将 Stretch Mode 设置为 canvas_items。 将 Aspect 设置为 keep。 将 Window Mode 设置为 maximized(而不是 windowed)。这样即使在窗口模式下最大化,也会正确缩放。

解决方案二:使用代码动态调整

在 _ready() 函数中添加: func _ready(): get_window().maximize() # 强制最大化 get_tree().set_screen_stretch(SceneTree.STRETCH_MODE_CANVAS_ITEMS, SceneTree.STRETCH_ASPECT_KEEP, Vector2(1920, 1080)) # 设置基准分辨率

Godot画面拉伸异常怎么办?怎么修复?

解决方案三:处理窗口大小变化信号

连接窗口大小变化信号: func _ready(): get_window().size_changed.connect(_on_window_resized) func _on_window_resized(): var window_size = get_window().size get_viewport().size = window_size

常见修复方法

确保没有硬编码窗口大小的代码,如 get_window().set_size(Vector2(800, 600)),删除或注释掉。 在 Project Settings 中检查 Base Size 和 Size,设置为0让它自动适应。

Godot画面拉伸异常怎么办?怎么修复?

另一个修复方式

将Stretch Mode改为disabled,然后手动在Viewport中设置: $Viewport.size = get_window().size $Viewport.canvas_transform = Transform2D(1, 0, 0, 1, 0, 0)

Godot画面拉伸异常怎么办?怎么修复?

测试确认

保存项目,重启Godot,按F11全屏测试,或手动最大化窗口,观察画面是否正确缩放而不拉伸。

FAQ
Q: 为什么Windowed模式下不缩放?
A: 因为Godot在Windowed模式下不会自动调整视口大小,需要手动处理或切换模式。
Q: canvas_items和keep有什么区别?
A: canvas_items让2D内容缩放,keep保持宽高比不扭曲。
Q: 最大化后黑边怎么办?
A: 改Aspect为expand,允许裁剪填满屏幕。
Q: 代码在哪里写?
A: 在主场景的根节点脚本的_ready()函数中。
Q: 4K屏幕显示异常?
A: 设置基准分辨率为屏幕原生分辨率,如Vector2(3840,2160)。