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.