代码生成的ProgressBar不受stretch_scale影响,请求确认是否为Bug
在Godot里,ProgressBar的stretch_scale失效基本都是操作设置问题,而非已知bug,你可以按以下几点逐一排查:
先看容器是否给足拉伸空间
ProgressBar必须放在支持拉伸布局的容器(比如HBoxContainer、VBoxContainer、PanelContainer)里,而且容器本身得有明确的可用尺寸——要么手动设了rect_size,要么通过父节点的布局规则撑开了。容器尺寸没到位的话,stretch_scale根本没发挥的余地。确认stretch_mode设置正确
别用默认的STRETCH_MODE_NONE,必须把ProgressBar的stretch_mode设为STRETCH_MODE_FILL或者STRETCH_MODE_KEEP_ASPECT,stretch_scale才会生效。代码里要这么写:progress_bar.stretch_mode = ProgressBar.STRETCH_MODE_FILL progress_bar.stretch_scale = Vector2(2, 1) # 根据需求调整数值别手动固定ProgressBar的尺寸
如果代码里给ProgressBar设了rect_size或者rect_min_size,这俩属性会优先于拉伸规则生效,直接把stretch_scale的效果覆盖了。确保没写类似progress_bar.rect_size = Vector2(100, 20)的代码。父节点不是容器的话,得设置锚点
要是ProgressBar直接挂在普通Control节点下,得把它的anchors_preset设为“铺满父节点”,或者手动调anchor_left、anchor_right这些属性,让它能跟着父节点的尺寸变化,否则stretch_scale也起不了作用。
要是以上都排查过还是不行,就写个最简复现代码:新建空场景,代码生成一个PanelContainer,再在里面加ProgressBar,设置好stretch属性后运行。如果还是没效果,再考虑是不是你用的Godot版本有特定bug,但这种情况非常少见。
内容的提问来源于stack exchange,提问作者SaltChaos

