2017-03-19 1 views
0

파이 게임 디스플레이에 .png 이미지를 블리치 할 때 FPS가 60에서 20으로 떨어지는 것을 보았을 때이 문제를 해결할 수있는 방법이 있는지, 아니면 내 코드에서 잘못된 점을 발견했습니다. ?.png 파이 게임이 느림

편집 : 나는 단지 시도 .convert_alpha(), 그것은) (40 FPS에게 지금

menu = pygame.image.load("Ecran titre\\principal\\menu.png") 
clock = pygame.time.Clock() 

gameExit = False 

while not gameExit : 

    for event in pygame.event.get(): 
     if (event.type == pygame.QUIT): 
      gameExit = True 

    #gameDisplay.fill(0) 

    gameDisplay.blit(background,(0,0)) # background is a jpeg image with .convert() 

    gameDisplay.blit(menu,(0,0)) 
    pygame.display.update() 
    clock.tick(60) 
    pygame.display.set_caption("fps: " + str(clock.get_fps())) 

답변

2

convert_alpha가는 것은 파이 게임 내에서 이미지를 관리하는 좋은 첫 번째 단계입니다. 이미지를 표면에 blitting하는 것은 표면을 표면에 blitting하는 것보다 훨씬 느리다는 것을 아는 것도 중요합니다. 내가 사용하고자하는 모든 이미지를 자신의 표면에 미리 그립니다. 그런 다음 그 표면을 화면에 블리 팅합니다. 일반적으로

gameDisplay.blit(img_surface, (x, y)) 

, 당신이 밖으로 아마도 당신만큼 할 수 먹고 싶어 : 게임 루프가에서 다음

img_rect = get_image("my_image.png").get_rect() 
img_surface = pygame.Surface((img_rect.width, img_rect.height), pygame.SRCALPHA) 
img_surface.fill((0, 0, 0, 0)) 
img_surface.blit(get_image("my_image.png"), img_rect) 

: 예를 들어, 아래 코드는 외부 게임 루프를 을 발생 게임 루프의 이 경우 이미지를 사전 처리하고보다 빠른지면에서 블리트 처리를 수행합니다.

미래에 파이썬에 cProfile을 사용해보십시오. 정말 코드가 게으른 것을 정확히 만들어주는 데 도움이 될 것입니다. 모든

Python getting meaningful results from cProfile

0

먼저, 이전의 대답에 명시된 "The4thIceman"와 같은, .convert_alpha()를 사용한다 : 여기에 좋은 정보입니다. 이렇게하면 코드 속도가 빨라지고로드 된 모든 이미지에 사용해야합니다.

둘째, 멀티 스레딩을 사용해야합니다. 멀티 스레딩은 동시에 여러 가지를 실행하는 프로그램을 만드는 기술입니다. 파이썬에는 "스레드"라이브러리가 내장되어 있습니다 (파이썬 3에서는 "_thread"라고 생각합니다). 이렇게하면 쉽게 할 수 있습니다.

https://docs.python.org/3/library/_thread.html

관련 문제