调整无边框窗口大小

时间:2021-07-31 12:33:56

标签: python python-3.x pygame

我正在制作一个平台游戏,我想让用户调整屏幕大小但没有边框(所以游戏不是固定比例)。但是我不知道实现这一点的最佳方法,我所有的版本都很慢(大约 8 fps)。

这是我的尝试

    def video_resize(self):
        self.fit_to_rect = self.blit_surf.get_rect().fit(self.screen.get_rect())  # fit the surface to the screen
        self.fit_to_rect.size = self.fit_to_rect.width * self.neutralizerZoom * self.zoom, self.fit_to_rect.height * self.neutralizerZoom * self.zoom  # add zoom

    def update(self):
        scaled = transform.scale(self.blit_surf, (self.fit_to_rect.width, self.fit_to_rect.height))  # scale surface to screen
        self.fit_to_rect.topleft = self.screen.get_rect().top + self.cameraPos[0], self.screen.get_rect().left + self.cameraPos[1]  # center surface & camera pos

        self.mousePos[0] = (mouse.get_pos()[0] / (scaled.get_width() / self.blit_surf.get_width())) - (self.cameraPos[0] / (scaled.get_width() / self.blit_surf.get_width()))  # scale x axis mouse pos
        self.mousePos[1] = (mouse.get_pos()[1] / (scaled.get_height() / self.blit_surf.get_height()))  # scale y axis mouse pos
        #scaled = scaled.subsurface(self.fit_to_rect.x, self.fit_to_rect.y, self.fit_to_rect.x + self.fit_to_rect.width, self.fit_to_rect.y + self.fit_to_rect.height)
        #self.screen.blit(scaled ,(0, 0))  # blit surface to screen
        self.screen.blit(scaled, (self.fit_to_rect.x, self.fit_to_rect.y, self.fit_to_rect.width, self.fit_to_rect.height))
        display.flip()  # update screen
        self.clock.tick(60)

像这样调整屏幕大小的最有效方法是什么?

1 个答案:

答案 0 :(得分:0)

不要在每一帧中缩放表面。调整大小时缩放表面一次:

class ...:

    def __init__(...):
        # [...]

        self.scaled_surf = self.blit_surf

    def video_resize(self):
        self.fit_to_rect = self.blit_surf.get_rect().fit(self.screen.get_rect())  # fit the surface to the screen
        self.fit_to_rect.size = self.fit_to_rect.width * self.neutralizerZoom * self.zoom, self.fit_to_rect.height * self.neutralizerZoom * self.zoom  # add zoom

        self.scaled_surf = transform.scale(self.blit_surf, (self.fit_to_rect.width, self.fit_to_rect.height))  # scale surface to screen

    def update(self):
        
        self.fit_to_rect.topleft = self.screen.get_rect().top + self.cameraPos[0], self.screen.get_rect().left + self.cameraPos[1]  # center surface & camera pos

        self.mousePos[0] = (mouse.get_pos()[0] / (scaled.get_width() / self.blit_surf.get_width())) - (self.cameraPos[0] / (scaled.get_width() / self.blit_surf.get_width()))  # scale x axis mouse pos
        self.mousePos[1] = (mouse.get_pos()[1] / (scaled.get_height() / self.blit_surf.get_height()))  # scale y axis mouse pos
               
        self.screen.blit(self.scaled_surf, (self.fit_to_rect.x, self.fit_to_rect.y, self.fit_to_rect.width, self.fit_to_rect.height))

        display.flip()  # update screen
        self.clock.tick(60)