【问题标题】:How to make a sprite carry on moving after they key has been released [duplicate]释放键后如何使精灵继续移动[重复]
【发布时间】:2021-12-01 19:34:46
【问题描述】:

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

'''

 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]

'''

【问题讨论】:

    标签: python python-3.x pygame


    【解决方案1】:

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

    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        
    

    【讨论】:

      【解决方案2】:

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

      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]
      

      【讨论】:

        猜你喜欢
        • 2020-03-06
        • 2017-11-08
        • 2014-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-05-29
        • 2021-03-30
        相关资源
        最近更新 更多