2015-07-01 2 views
3

Я делаю простую игру python, используя pygame, и после того, как я добавил функцию переключения пушек, игра начала отставать. Я понятия не имею, почему он отстает. Я попытался перезагрузить, но это не сработало. Кодекс действительно короткий, поэтому, возможно, это просто мой компьютер, но если есть что-то, что может помочь запустить его быстрее, пожалуйста, дайте мне знать. Вот код:Почему мой простой пигаж отстает?

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() 

Благодарим за помощь.

ответ

2

Вы можете попытаться загрузить изображения своих пушек перед циклом while и сохранить ссылку на них, так что вам не нужно загружать изображение «на лету» каждый раз.

1

Не звоните pygame.image.load с вашего обработчика событий.

Вместо этого позвоните по всем своим ресурсам при запуске и просто выключите, какой из них вы используете .

1

Возможно, это самая важная вещь, которую вы можете узнать в Pygame.

В течение многих лет у меня были проблемы с задержкой в ​​Pygame. Я был расстроен и почти переключился на Pyglet. Моя игра работала только со скоростью 9 кадров в секунду.

Затем я нашел документацию на своем компьютере около Pygame. У него были некоторые советы Дэвида Кларка, и он предложил вам добавить .convert_alpha() в конце всех загрузок изображений Pygame. Это увеличило частоту кадров до 32!

Вот сайт:

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

Я всегда просто создать функцию, чтобы сделать это для меня, так что я не должен держать печатая «.convert_alpha()» слишком много раз:

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

Просто замените pygame.image.load( на loadify( при использовании этой функции.

Удачи с Pygame!

Смежные вопросы