我正在尝试使用ursina制作游戏,但在运行我的代码时存在一些问题
我想让我的立方体在我按下arrows
时移动而摄像机随着wasd
移动
效果很好,但是立方体在移动时不停地晃动
当我按下UP arrow
时,它会晃动
但是,当我停止按arrows
时,它没有。它只是不能流畅地移动
有什么方法可以解决这个问题吗?我的代码一定有问题
下面是我的代码:import ursina as us
app = us.Ursina()
class Player(us.Entity):
def __init__(self):
super().__init__(
parent=us.scene,
model='cube',
position=(0, 1, 0),
rotation=(0, 45, 0),
texture='white_cube',
color=us.color.azure,
)
us.camera.position = (0, 2, 5)
us.camera.look_at(self)
self.speed = 5
self.gravity = 0.01
self.strength = 0.2
self.v = None
def update(self):
us.camera.look_at(self)
if us.held_keys['up arrow']:
self.position += self.forward * us.time.dt * self.speed
if us.held_keys['down arrow']:
self.position += self.back * us.time.dt * self.speed
if us.held_keys['right arrow']:
self.rotation += (0, 5, 0)
if us.held_keys['left arrow']:
self.rotation += (0, -5, 0)
if us.held_keys['w']:
us.camera.position += us.camera.forward * us.time.dt
if us.held_keys['s']:
us.camera.position += us.camera.back * us.time.dt
if us.held_keys['d']:
us.camera.position += us.camera.right * us.time.dt
if us.held_keys['a']:
us.camera.position += us.camera.left * us.time.dt
if us.held_keys['left shift']:
player.speed = 10
else:
player.speed = 5
if us.held_keys['space']:
self.jump()
if self.v != None:
self.v -= self.gravity
if self.v > -self.strength:
self.position += (0, self.v, 0)
else:
self.v = None
def jump(self):
if self.v == None:
self.v = self.strength
if __name__ == '__main__':
player = Player()
us.Sky()
app.run()
如有任何帮助,不胜感激
感谢将camera.look_at(self)
移动到更新函数的底部,这样它就会在您移动相机后执行look_at。