0

I began learning how to program on pygame recently. I followed a tutorial and learned how to import assets and have player movement with key presses. However, every time I try moving by holding down keys (without mouse movement), it moves at a slow velocity and looks choppy. When I constantly move my mouse and begin to move with the keys the movement becomes smoother and faster. I am very new to pygame so if this is a rookie mistake I apologize.

import pygame
from sys import exit

player_gravity = 0
pygame.init()
screen = pygame.display.set_mode((800,400))
pygame.display.set_caption("2d platformer")
clock = pygame.time.Clock()
test_font = pygame.font.Font(None, 50)

sky_surface = pygame.image.load("graphics/sky.png").convert()
ground_surface = pygame.image.load("graphics/ground.png").convert()

creeper_surface = pygame.image.load("graphics/enemy.png").convert_alpha()
creeper_rectangle = creeper_surface.get_rect(bottomright = (600,300))

player_surface = pygame.image.load("graphics/player.png").convert_alpha()
player_rectangle = player_surface.get_rect(midbottom = (80,300))

Steps = 5
Sprints = 10

x_change = 0
accel_x = 0
accel_y = 0
max_speed = 6

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        keys = pygame.key.get_pressed()

        
                
        if keys[pygame.K_a] and not keys[pygame.K_RIGHT]:
            x_change = max(x_change-0.2, -max_speed)
        elif keys[pygame.K_d] and not keys[pygame.K_LEFT]:
            x_change = min(x_change+0.2, max_speed)
        else:
            x_change *= 0.50
        if keys[pygame.K_w] and player_rectangle.bottom >= 300:
            player_gravity = -20

        player_rectangle.x += x_change
        
    screen.blit(sky_surface,(0,0))
    screen.blit(ground_surface,(0,300))
    
    creeper_rectangle.x -=4
    
    if creeper_rectangle.right <= 0:
        creeper_rectangle.left = 800
        
    screen.blit(creeper_surface,creeper_rectangle)
    
    player_gravity += 1
    player_rectangle.y += player_gravity
    if player_rectangle.bottom >= 300:
        player_rectangle.bottom = 300
        
    screen.blit(player_surface,player_rectangle)

    pygame.display.update()
    clock.tick(60)

I tried using while loops, but that crashed the window everytime.

Rabbid76
  • 202,892
  • 27
  • 131
  • 174
  • `pygame.key.get_pressed()` is not an event. You have to run that part of the code in the application loop not in the event loop. – Rabbid76 Dec 27 '22 at 07:23

0 Answers0