如何让精灵在释放按键后继续移动

How to make a sprite carry on moving after they key has been released

我有一个精灵在按下其中一个箭头键时四处移动,但是我希望精灵在释放键后继续朝键的方向移动一小段时间,仿佛在冰上滑来滑去。

'''

 mv_speed = 5

  def move(self):
     global mv_speed
    
     keys = pg.key.get_pressed()

    
     self.pos_x += (mv_speed * (keys[pg.K_RIGHT] - keys[pg.K_LEFT]))
     self.pos_y += (mv_speed * (keys[pg.K_DOWN] -  keys[pg.K_UP]))
    
     if keys == False:
         self.pos_x += 50 * (keys[pg.K_RIGHT] - keys[pg.K_LEFT])
         self.pos_y += 50 * (keys[pg.K_DOWN] -  keys[pg.K_UP])
    
     self.rect.center = [self.pos_x,self.pos_y]

'''

添加指示移动方向和速度的属性。为按下按钮的每一帧增加少量速度。通过摩擦系数缩放每帧的速度:

class Player:
    def __init__(self):
        # [...]

        self.speed_x = 0
        self.speed_y = 0
        self.acceleration = 0.1
        self.friction = 0.98
        self.max_speed = 5

    def move(self):
        self.speed_x += self.acceleration * (keys[pg.K_RIGHT] - keys[pg.K_LEFT])
        self.speed_y += self.acceleration * (keys[pg.K_DOWN] - keys[pg.K_UP])
        self.speed_x = max(-self.max_speed, min(self.max_speed, self.speed_x))
        self.speed_y = max(-self.max_speed, min(self.max_speed, self.speed_y))  
        
        self.pos_x += self.speed_x 
        self.pos_y += self.speed_y      
        self.rect.center = round(self.pos_x), round(self.pos_y)

        self.speed_x *= self.friction
        self.speed_y *= self.friction        

最终有很多方法可以实现,具体取决于您想要的效果。这可能会给您带来类似的效果,同时增加加速和减速。

mv_speed = 5
skidding = 0
speed_x=[0,0,0,0,0]
speed_y=[0,0,0,0,0]

  def move(self):
     global mv_speed
    
     keys = pg.key.get_pressed()
     speed_x.insert(0,mv_speed * (keys[pg.K_RIGHT] - keys[pg.K_LEFT]))
     speed_y.insert(0,mv_speed * (keys[pg.K_DOWN] -  keys[pg.K_UP]))
        
     self.pos_x += speed_x.pop()
     self.pos_y += speed_y.pop()
    
     self.rect.center = [self.pos_x,self.pos_y]