2017-12-17 23 views
1

저는 플랫폼 작성자를 만들고 있으며 백그라운드를 블리 칭할 때 문제가 발생했습니다. 현재 코드에서 게임 루프는 모든 프레임의 게임 창에 배경을 그립니다. 단색이 아닌 배경을 사용하려고 할 때 게임이 실제로 느려집니다. 제 질문은 게임이 너무 느려지지 않도록 가능한 한 배경을 한 번만 블리트하는 방법입니다.파이 게임에서 백그라운드를 한 번만 블리트하려면 어떻게해야합니까?

class Game: 
    def __init__(self): 
     pg.init() 
     pg.mixer.init() 
     self.bg = pg.image.load("background.jpg") 
     self.screen = pg.display.set_mode((WIDTH, HEIGHT)) 
     pg.display.set_caption(TITLE) 
     self.clock = pg.time.Clock() 
     self.running = True 
     self.font_name = pg.font.match_font(FONT_NAME) 
     self.pillarhp = 100 


    def new(self): 
     self.run() 

    def run(self): 
     self.clock.tick(FPS) 
     self.playing = True 
     while self.playing: 
      self.clock.tick(FPS) 
      self.events() 
      self.update() 
      self.draw() 


    def draw(self): 
     now = pg.time.get_ticks() 
     self.screen.blit(self.bg, [0, 0]) 
     self.screen.blit(self.island, [0,0]) 
     self.all_sprites.draw(self.screen) 
     self.draw_text("Score: " + str(self.score), 20, BLACK, 40, 20) 
     self.draw_text("Pillar HP: " + str(self.pillarhp), 20, BLACK, 40, 50) 
     pg.display.flip() 
+1

코드를 보여주십시오 ([최소, 완전하고 검증 가능한 예] (https://stackoverflow.com/help/mcve)). – skrx

+0

배경 화면의 ['convert'] (https://www.pygame.org/docs/ref/surface.html#pygame.Surface.convert) 메소드를 호출하십시오. 'self.bg = pg.image.load ("background.jpg"). convert()'. 그러면 성능이 향상 될 것입니다. 배경 이미지의 크기는 얼마입니까? – skrx

+0

.convert()를 추가했지만 오류가 발생했습니다. self.bg = pg.image.load ("background.jpg") convert() pygame.error : 비디오 모드가 설정되지 않았습니다. 이미지가 없습니다. 28.0 KB 및 1280x700 –

답변

1

전화 배경 표면의 convert 방법, 예를 들어, 다음은

이미지를 블리트로 이어질 내 게임 클래스의 일부이다

self.bg = pg.image.load("background.jpg").convert() 

이렇게하면 성능이 향상됩니다.

픽셀 당 투명도가있는 이미지의 경우 convert_alpha 메서드를 사용할 수 있지만 convert 메서드로 변환 한 이미지는 훨씬 빠르게 blitted됩니다.