Pygame lags when two players are involved

I just started playing with pygame and just ran into a problem - when I make my game for 2 players, the second character is always behind. Here is my code.

import pygame, sys from pygame.locals import * pygame.init() clock = pygame.time.Clock() background_img = pygame.image.load('Data/background.jpg') size = background_img.get_size() pygame.mixer.init() pygame.mixer.music.load('Data/song.wav') pygame.mixer.music.set_volume(0.7) pygame.mixer.music.play(-1) dot_img = pygame.image.load('Data/dot.png') dotx = 0 doty = 0 dotx_speed = 0 doty_speed = 0 circle_img = pygame.image.load('Data/circle.png') circlex = 0 circley = 0 circlex_speed = 0 circley_speed = 0 display = pygame.display.set_mode(size) pygame.display.set_caption('Game') while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: dotx_speed = -10 elif event.key == pygame.K_RIGHT: dotx_speed = 10 elif event.key == pygame.K_UP: doty_speed = -10 elif event.key == pygame.K_DOWN: doty_speed = 10 elif event.key == pygame.K_a: circlex_speed = -10 elif event.key == pygame.K_d: circlex_speed = 10 elif event.key == pygame.K_w: circley_speed = -10 elif event.key == pygame.Ls: circley_speed = 10 elif event.type == pygame.KEYUP: if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: dotx_speed = 0 elif event.key == pygame.K_UP or event.key == pygame.K_DOWN: doty_speed = 0 elif event.key == pygame.K_a or event.key == pygame.K_d: circlex_speed = 0 elif event.key == pygame.K_w or event.key == pygame.K_s: circley_speed = 0 dotx += dotx_speed doty += doty_speed circlex += circlex_speed circley += circley_speed display.blit(background_img,(0,0)) display.blit(dot_img,(dotx,doty)) display.blit(circle_img,(circlex,circley)) pygame.display.update() clock.tick(100) 

I am not so good at pygame or python, so please forgive my messy code. Any help is appreciated.

+6
source share
1 answer

Firs of all event and computation handlers in a single thread is bad practice. Since your calculations may not be as fast as you want (100 frames per second in your example) For example, check the resolution of your images.

Also, you have too many if - else (this is not an error in your case). You can replace it with dicts.

Make your frame rate more realistic (60).

Read the beginner's guide to pygame , there are some errors in your code, for example, using pygame.image.load('foo.png') using the .convert() method "to get some speed from your bits."

+2
source

All Articles