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

如何在Ursina Engine Python3.8中隐藏实体?手电筒代码故障求助

Ursina手电筒功能修复方案

原代码存在的问题

  • 使用time.sleep(1.0)会阻塞Ursina的主循环,程序直接冻结1秒,期间无法渲染实体,导致你看不到光束显示就被设置为不可见。
  • update()函数每帧都会执行,按住按键1时会反复调用flashlight(),瞬间生成大量重复实体,即使修复sleep问题也会出现异常。

修复后的代码

from ursina import *

app = Ursina()
# 提前创建手电筒实体,初始设为隐藏
flashlight_beam = Entity(model='sphere', scale=4, color=color.light_gray, visible=False)

def toggle_flashlight():
    # 只有当光束未显示时才触发
    if not flashlight_beam.visible:
        flashlight_beam.visible = True
        # 用Ursina自带的invoke实现延迟隐藏,不阻塞主循环
        invoke(setattr, flashlight_beam, 'visible', False, delay=1)

def update():
    # 检测按键按下的瞬间(而非持续按住),避免重复触发
    if held_keys['1 down']:
        toggle_flashlight()

app.run()

关键修改说明

  • 提前创建实体:避免每次按键都生成新的实体,减少资源消耗,同时保证操作的是同一个光束。
  • 改用'1 down'检测:只在按键按下的第一帧触发函数,不会因为按住按键重复执行。
  • 使用invoke()替代time.sleep():Ursina的invoke()会在主循环中延迟执行指定操作,不会冻结程序,确保光束能正常显示1秒后再隐藏。
  • 增加可见性判断:防止在光束显示期间重复触发,导致提前隐藏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:15:14