0

I've been trying to work through some tutorials for pygame, and have hit a bit of a roadblock. When I open my program, I cannot get the arrow keys to move my player at all. I'm confused because the escape key works fine when attempting to close the game. What am I doing wrong here? Thank you in advance.

import pygame

from pygame.locals import (
    K_UP,
    K_DOWN,
    K_LEFT,
    K_RIGHT,
    K_ESCAPE,
    KEYDOWN,
    QUIT,
)

SCREEN_WIDTH = 750
SCREEN_HEIGHT = 500

class Player(pygame.sprite.Sprite):
    def __init__(self):
        super(Player, self).__init__()
        self.surf = pygame.Surface((75, 25))
        self.surf.fill((255, 255, 255))
        self.rect = self.surf.get_rect()

    def update(self, pressed_keys):
        if pressed_keys [K_UP]:
            self.rect.move_ip(0, -5)
        if pressed_keys [K_DOWN]:
            self.rect.move_ip(0, 5)
        if pressed_keys [K_LEFT]:
            self.rect.move_ip(-5, 0)
        if pressed_keys [K_RIGHT]:
            self.rect.move_ip(-5, 0)

pygame.init()

screen = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT])

player = Player()

running = True

while running:
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                running = False
        elif event.type == QUIT:
                running = False

    pressed_keys = pygame.key.get_pressed()

    player.update(pressed_keys)

    screen.fill((0,0,0))

    screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2))

    pygame.display.flip()

pygame.quit() ```

1 Answers1

1

It works fine, but you keep drawing the player to the center of the window with screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2)).

screen.blit(player.surf, player.rect.topleft) draws the player at it's position.

Also the player moves to the left when you press the right arrow.

if pressed_keys [K_RIGHT]:
            self.rect.move_ip(-5, 0)
Jerry
  • 401
  • 4
  • 11