Ursina中重写FirstPersonController的update导致玩家控制失效的解决办法
Ursina重写FirstPersonController的update后玩家控制失效的解决办法
问题根源很直白:FirstPersonController的update方法本身就包含了玩家移动、鼠标视角控制的全部逻辑。当你重写这个方法却没调用父类的update时,等于把原本的控制代码完全替换掉——哪怕是空的update,也会让父类的控制逻辑彻底失效。
解决方法也直接:在你自定义的update方法里,必须调用父类的update方法,让原本的控制逻辑正常运行,再加上你的回血逻辑即可。
示例代码:
from ursina import * from ursina.prefabs.first_person_controller import FirstPersonController import time class Player(FirstPersonController): def __init__(self, **kwargs): super().__init__(**kwargs) self.health = 100 # 初始化生命值 def update(self): # 先调用父类的update,保证行走、视角控制正常 super().update() # 你的回血逻辑:生命值未满且无危险时回血 if self.health < 100: # 这里可以添加危险检测的判断,比如检测附近是否有敌人 self.health += 0.1 * time.dt self.health = min(self.health, 100) # 防止生命值超过上限 if __name__ == '__main__': app = Ursina() Player() Sky() app.run()
如果不想重写update,也可以用Ursina自带的repeat方法实现定时回血,完全不影响父类的控制逻辑:
from ursina import * from ursina.prefabs.first_person_controller import FirstPersonController class Player(FirstPersonController): def __init__(self, **kwargs): super().__init__(**kwargs) self.health = 100 # 每隔0.1秒执行一次回血方法,循环运行 self.repeat(self.regenerate_health, delay=0.1) def regenerate_health(self): if self.health < 100: # 这里添加危险检测逻辑 self.health += 1 self.health = min(self.health, 100) if __name__ == '__main__': app = Ursina() Player() Sky() app.run()
内容的提问来源于stack exchange,提问作者lvl1_coder
相关产品推荐
相关产品推荐

