如何让精灵在释放按键后继续移动
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]
我有一个精灵在按下其中一个箭头键时四处移动,但是我希望精灵在释放键后继续朝键的方向移动一小段时间,仿佛在冰上滑来滑去。
'''
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]