调整无边框窗口的大小

2024-04-25 11:36:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个平台,我想让用户调整屏幕大小,但没有边界(因此游戏不是固定比例)。但是我不知道最好的实现方法,我所有的版本都非常慢(大约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条回答
网友
1楼 · 发布于 2024-04-25 11:36:02

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

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)

相关问题 更多 >