Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does my simple pygame lag? [duplicate]

I have been making a simple python game using pygame and after I added the feature of switching guns the game started to lag. I have no idea why it is lagging. I have tried rebooting but it didn't work. The code is really short so maybe it is just my computer, but if there is anything that may help run it faster please let me know. Here is the code:

import sys, pygame, pygame.mixer
from pygame.locals import *

pygame.init()

size = width, height = 600, 400

screen = pygame.display.set_mode(size)

pygame.display.set_caption('Blue Screen of Death')

#variables
x = 100
y = 200
gun_type = "gun1"
gun = pygame.image.load("gun1.png")
gun = pygame.transform.scale(gun,(500,250))
gun_sound = pygame.mixer.Sound("gun_sound.wav")
clock = pygame.time.Clock()

while 1:
  mx, my = pygame.mouse.get_pos()
  for event in pygame.event.get():
    if event.type == pygame.QUIT:sys.exit()

    elif event.type == KEYDOWN and event.key == K_ESCAPE:
      sys.exit()
    elif event.type == MOUSEBUTTONDOWN:
      gun_sound.play()
    elif event.type == KEYDOWN and event.key == K_1:
      gun = pygame.image.load("gun1.png")
      gun = pygame.transform.scale(gun,(500,250))
      gun_type = "gun2"
    elif event.type == KEYDOWN and event.key == K_2:
      gun = pygame.image.load("gun2.png")
      gun = pygame.transform.scale(gun,(500,250))
      gun_type = "gun2"
    elif event.type == KEYDOWN and event.key == K_TAB:
    if gun_type == "gun2":
      gun_type = "gun2_aimed"
    elif gun_type == "gun2_aimed":
      gun_type = "gun2"
    elif gun_type == "gun2_aimed":
      gun = pygame.image.load("gun2_aimed.png")
      gun = pygame.transform.scale(gun,(500,250))



  #frames per second
  clock.tick(60)

  hallway = pygame.image.load("hallway.png")
  hallway = pygame.transform.scale(hallway,(600,400))
  screen.blit(hallway,(0,0))

  screen.blit(gun,(mx-100,y))

  pygame.display.flip()

Thanks for your help.

like image 291
Mitchell Conrad Avatar asked Nov 26 '25 20:11

Mitchell Conrad


1 Answers

This is probably the most important thing you can learn in Pygame.

For many years, I've had lagging issues in Pygame. I was frustrated, and almost switched to Pyglet. My game was only running at 9 fps.

Then I found some Pygame documentation on my computer. It had some advice from David Clark, and he suggested you add .convert_alpha() at the end of all Pygame image loads. This increased my framerate to 32!

Here's the website:

https://www.pygame.org/docs/tut/newbieguide.html

I always just create a function to do it for me, so I don't have to keep typing '.convert_alpha()' too many times:

def loadify(imgname):
    return pygame.image.load(imgname).convert_alpha()

Just replace pygame.image.load( to loadify( when using this function.

Have fun with Pygame!

like image 74
Douglas - 15 year old Pythoner Avatar answered Nov 29 '25 10:11

Douglas - 15 year old Pythoner



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!