2015-07-01 2 views
0

Делает файтинг в Pygame, но всякий раз, когда я загружаю фон (940x680 PNG), программа начинает отставать очень плохо, вот мой код:Как загрузить огромное изображение с pygame в качестве фона?

#import section 
import os 
import pygame 
import time 
from pygame.locals import * 

#end of import section 

#initiazing pygame 
pygame.init() 
print "Loaded Pygame 100%" 

#lengths 
width, height = 940,680 

#opening window 
screen = pygame.display.set_mode((width, height)) 

#position 
background = [0,0] 


#loading images 
back = pygame.image.load("resources/image/Back.png") 

print "Loaded graphics 100%" 


while 1: 



    #clear to reload 
    screen.fill(0) 

    #drawing background 
    screen.blit(back, background) 

    #update 
    pygame.display.flip() 

Это может быть новичком вопросом, но я просто начал так да ...

+1

Я не очень хорошо знаком с pygame, но разве это не перерисовывает фон в каждом кадре? –

+0

В этом проблема, я не знаю, как не перерисовывать фон каждый раз – Weidoo

+0

Не можете ли вы просто обновить вещи, которые есть на экране, а не очищать и перерисовывать все? –

ответ

0

В pygame вам нужно использовать этот код, который вы написали.

#clear to reload 
screen.fill(0) 

#drawing background 
screen.blit(back, background) 

#update 
pygame.display.flip() 

Если вы добавили игрока на экран, а затем переместите его. Вы заметите, что если вы не перекроете фон, вы увидите символ более одного раза.

Pygame не только позволяет вам добавлять изображение на экран и перемещать его, вы должны перерисовать фон, чтобы избавиться от предыдущего кадра.

Еще одна вещь, которую вы должны добавить в свой код - это подождать.

clock = pygame.time.Clock() 
FPS = 30 

while 1: 
    clock.tick(FPS) 

Это установит частоту кадров. Я бы сказал, что вы обычно хотели бы этого на 30-60 кадров, в зависимости от игры/оборудования.

Ваша текущая программа, вероятно, перерисовывает рамку несколько сотен раз, поэтому это определенно добавит отставание.

Когда я проверил это на своем компьютере Ubuntu 12.04 без фона. т. е. черный экран.

Моя частота кадров была между 1000 - 2000 FPS.

+0

* вы должны перерисовать фон, чтобы избавиться от предыдущего кадра. *: Да, но вам не нужно перерисовывать * весь * фон (смотрите в pygame 'DirtySprite' и' LayeredDirty'). – sloth

+0

Я посмотрю. Я думаю, что проблема пользователей здесь - его, вероятно, частота кадров. – Dobz

+0

Да, это главный вопрос. Это и тот факт, что он не очищает очередь событий. – sloth

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