Ursina引擎子弹数量文本标签异常:首次射击后停止更新
问题解决:Ursina子弹数量文本停止更新
问题根源
你把all_ammo、round_ammo和ammo都定义在了input函数内部,而Ursina的input函数每次触发输入事件(比如点击鼠标)都会重新执行一遍。这意味着每次点击时,这三个变量都会被重置回初始值,Text组件也会重新创建。第一次点击后round_ammo变成99,但下次点击时函数又把它重置回100,再减1还是99,看起来就像没变化。
修复后的代码
from ursina import * app = Ursina() # 变量和Text组件只初始化一次,放在input函数外 all_ammo = 100 round_ammo = 100 ammo = Text( color=color.red, scale=1, position=(0.8, 0.5), text=f"{all_ammo} {round_ammo}" # 初始化时设置默认文本 ) def input(key): global round_ammo # 声明要修改全局变量 if key == "left mouse down": round_ammo -= 1 ammo.text = f"{all_ammo} {round_ammo}" app.run()
关键改动说明
- 将变量和Text组件移到
input函数外部,确保它们只被初始化一次,不会每次输入事件都重置。 - 在
input函数中添加global round_ammo,告诉Python我们要修改全局作用域的这个变量,避免被当成局部变量处理。 - 初始化Text时就设置好初始文本,避免第一次点击前显示空白。
内容的提问来源于stack exchange,提问作者Someone
相关产品推荐
相关产品推荐

