为什么立方体一直在摇晃?



我正在尝试使用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。

最新更新