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

如何让Ursina引擎满足条件后停止每帧调用update()且不中断其余脚本运行

Ursina 停止update函数调用的可行方案

方案1:轻量化开关控制(最灵活,可随时恢复update调用)

  • 新增一个布尔控制变量,在update函数入口做条件判断,不满足则直接终止当前帧的update逻辑,完全不影响其他代码运行:
from ursina import *

app = Ursina()
# 定义update运行开关
enable_update = True

def update():
    # 入口判断,开关关闭时直接返回,不执行后续逻辑
    if not enable_update:
        return
    # 原有update逻辑
    print("update 正在运行")

# 示例:按Q键触发停止update
def input(key):
    global enable_update
    if key == 'q':
        enable_update = False
        # 如需同步关闭窗口,可额外调用 window.destroy()

app.run()

方案2:解绑调度(彻底停止update被调用,无需额外判断)

Ursina的全局update是通过事件调度器定时触发的,直接调用unschedule()方法移除该函数的调度即可:

from ursina import *

app = Ursina()

def update():
    print("update 正在运行")

# 满足条件时调用该函数即可停止update的定时调用
def stop_update():
    unschedule(update)

# 示例:启动3秒后自动停止update
invoke(stop_update, delay=3)

app.run()

方案3:实体绑定update的停用方案

如果你的update是绑定在某个Entity子类实例上的,直接修改实例的enabled属性即可:

  • 将对应实例的enabled设为False后,该实体绑定的update、input等所有回调都会停止调用,不影响全局逻辑和该实体的其他属性读写:
from ursina import *

app = Ursina()

class CustomEntity(Entity):
    def update(self):
        print("实体update正在运行")

test_entity = CustomEntity()

# 满足条件时停用该实体的所有回调
test_entity.enabled = False

app.run()

原有方案问题说明

application.quit()会直接终止Ursina的整个事件循环,导致整个脚本退出;app.destroy()只会销毁渲染窗口和图形资源,Ursina的事件调度器仍在运行,因此update会持续被调用,这两个方法都不符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:54:10