I've been trying to figure it out for hours. Someone help please? The problem is if I hit the pause key while holding a movement key, the character will continue moving in that direction after its unpaused. The only way to stop it is to hold key for the opposite direction and pause simultaneously, or close.
import pygame import os os.environ['SDL_VIDEO_CENTERED'] = '1' import sys from pygame.locals import * pygame.display.set_mode((800, 600)) class Player(pygame.sprite.Sprite): def __init__(self): global direction pygame.sprite.Sprite.__init__(self) self.movex = 0 self.movey = 0 self.frame = 0 self.images = [] img_right = pygame.image.load('assets/charactermodels/hero_right_small.png').convert_alpha() img_left = pygame.image.load('assets/charactermodels/hero_left_small.png').convert_alpha() img_down = pygame.image.load('assets/charactermodels/hero_front_small.png').convert_alpha() img_up = pygame.image.load('assets/charactermodels/hero_back_small.png').convert_alpha() self.images.append(img_right) self.images.append(img_left) self.images.append(img_down) self.images.append(img_up) self.image = self.images[2] self.rect = self.image.get_rect() def action(self): if self.rect.x >= 280 and self.rect.x <= 320 and self.rect.y >= 440: textures["S"] = OH def control(self, x, y): self.movex += x self.movey += y def update(self): self.rect.x = self.rect.x + self.movex self.rect.y = self.rect.y + self.movey if direction == 'right': self.image = self.images[0] elif direction == 'left': self.image = self.images[1] elif direction == 'down': self.image = self.images[2] elif direction == 'up': self.image = self.images[3] else: self.image = self.images[0] if self.rect.y <= -55: self.rect.y = -55 if self.rect.x >= 657: self.rect.x = 657 if self.rect.y >= 447: self.rect.y = 447 if self.rect.x <= -25: self.rect.x = -25 if self.rect.x > 398 and self.rect.x < 435 and self.rect.y > 15 and self.rect.y < 44: textures["B1"] = Y def Pause(): #create menu pygame.display.set_caption('***GAME PAUSED***') background = pygame.display.set_mode((x*tilesize, y*tilesize)) #Loop Setup pause = True while pause: for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.type == pygame.QUIT: pygame.quit(); sys.exit() if event.key == ord('p') or event.key == ord('P'): pause = False if event.key == ord('q'): pygame.quit() sys.exit() pygame.display.set_caption('Mysterious Mr. MAN') blk = (0, 0 , 0) direction = 'down' OH = pygame.image.load('assets/levels/black.png').convert() B = pygame.image.load('assets/levels/wall_bottom.png').convert() O = pygame.image.load('assets/itemsobjects/PressMeButton.png').convert() Y = pygame.image.load('assets/itemsobjects/successButton.png').convert() textures = { 0:pygame.image.load('assets/levels/floor1.png').convert(), 1:pygame.image.load('assets/levels/wall_left.png').convert(), 2:pygame.image.load('assets/levels/corner_TL.png').convert(), 3:pygame.image.load('assets/levels/corner_TR.png').convert(), 4:pygame.image.load('assets/levels/corner_BL.png').convert(), 5:pygame.image.load('assets/levels/corner_BR.png').convert(), 6:pygame.image.load('assets/levels/wall_top.png').convert(), 7:pygame.image.load('assets/levels/wall_right.png').convert(), 8:B, 9:pygame.image.load('assets/levels/floor2.png').convert(), 10:blk, "B1":O, "S":B } map = [ [2, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 7], [1, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7], [1, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, "B1", 0, 0, 0, 0, 0, 9, 7], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 7], [1, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 7], [1, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 7], [1, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 7], [1, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 7], [1, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7], [4, 8, 8, 8, 8, 8, 8, 8, 8, "S", 8, 8, 8, 8, 8, 8, 8, 8, 8, 5] ] tilesize = 40 x = 20 y = 15 fps = 24 ani = 4 worldx = x * tilesize worldy = y * tilesize player = Player() # spawn player player.rect.x = 300 # go to x player.rect.y = 200 # go to y player_list = pygame.sprite.Group() player_list.add(player) steps = 2 #how many pixels to move player_coord = (player.rect.x, player.rect.y) pygame.init() pygame.display.set_caption('Mysterious Mr. MAN') background = pygame.display.set_mode((x*tilesize, y*tilesize)) background.fill(blk) main = True while main: for event in pygame.event.get(): print(event) if event.type == pygame.QUIT: pygame.quit(); sys.exit() main = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: player.action() if event.key == pygame.K_LEFT or event.key == ord('a'): print('Start: ', player_coord) player.control(-steps,0) direction = 'left' if event.key == pygame.K_RIGHT or event.key == ord('d'): print('Start: ', player_coord) player.control(steps,0) direction = 'right' if event.key == pygame.K_UP or event.key == ord('w'): print('Start: ', player_coord) player.control(0, -steps) direction = 'up' if event.key == pygame.K_DOWN or event.key == ord('s'): print('Start: ', player_coord) player.control(0, steps) direction = 'down' if event.key == ord('p') or event.key == ord('P'): player.control(0, 0) Pause() if event.type == pygame.KEYUP: if event.key == pygame.K_LEFT or event.key == ord('a'): print('EndPos: ', player_coord) print() print() player.control(steps,0) if event.key == pygame.K_RIGHT or event.key == ord('d'): print('EndPos: ', player_coord) print() print() player.control(-steps,0) if event.key == pygame.K_UP or event.key == ord('w'): print('EndPos: ', player_coord) print() print() player.control(0, steps) if event.key == pygame.K_DOWN or event.key == ord('s'): print('EndPos: ', player_coord) player.control(0, -steps) print() print() if event.key == ord('q'): pygame.quit() sys.exit() main = False for row in range(y): for column in range(x): background.blit(textures[map[row][column]], (column*tilesize, row*tilesize)) player_coord = (player.rect.x, player.rect.y) player.update() #update sprite player_list.draw(background) # draw player pygame.display.flip() pygame.display.update() steps = 2 continue