如何让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
相关产品推荐
相关产品推荐

