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

Godot 4.0中TextureProgressBar值变更时进度纹理不更新问题求助

Godot 4.0 TextureProgressBar 不实时更新的问题解决

问题原因

你的代码中start_progress_bar函数的三层嵌套循环会完全阻塞主线程。Godot的UI渲染、输入响应和脚本逻辑都运行在同一个主线程中,当密集计算占用主线程时,Godot根本没有机会去更新TextureProgressBar的显示,直到整个循环执行完毕(进度值达到100),才会一次性刷新UI。

修复方案

方案1:用异步等待释放主线程

修改start_progress_bar函数,在每次更新进度后,通过await让主线程处理一帧的UI渲染:

extends Node2D

func _ready():
    var loading_bar = get_node("Loading Screen/Loading Bar")
    loading_bar.position = Vector2(200, 360)
    loading_bar.value = 1

func start_world_creation():
    await start_progress_bar()  # 函数改为异步,需用await调用

func start_progress_bar():
    for x in 100:
        # 模拟耗时操作
        for y in 100:
            for time_waster in range(20000):
                time_waster += 300
        # 更新进度条
        var loading_bar = get_node("Loading Screen/Loading Bar")
        loading_bar.value += 1
        print(loading_bar.value)
        # 等待下一帧,让主线程处理UI更新
        await get_tree().process_frame

func _on_start_timer_timeout():
    start_world_creation()

方案2:将任务拆分到_process帧循环

把耗时操作拆分成小块,每帧只处理一部分,保证主线程始终有时间更新UI:

extends Node2D

var current_progress = 1
var is_processing = false

func _ready():
    var loading_bar = get_node("Loading Screen/Loading Bar")
    loading_bar.position = Vector2(200, 360)
    loading_bar.value = current_progress

func start_world_creation():
    is_processing = true

func _process(delta):
    if not is_processing or current_progress >= 100:
        is_processing = false
        return
    
    # 每帧完成一次耗时计算
    for y in 100:
        for time_waster in range(20000):
            time_waster += 300
    
    # 更新进度条
    current_progress += 1
    var loading_bar = get_node("Loading Screen/Loading Bar")
    loading_bar.value = current_progress
    print(current_progress)

func _on_start_timer_timeout():
    start_world_creation()

额外说明

如果实际项目中的耗时操作是资源加载、复杂数据计算等更重的任务,推荐使用Godot的Thread类创建后台线程处理,避免阻塞主线程。但对于这类简单循环任务,上述两种方案已足够解决UI不实时更新的问题。

内容的提问来源于stack exchange,提问作者Frasher Gray

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:03:19