我正在制作一个平台游戏,我想让用户调整屏幕大小但没有边框(所以游戏不是固定比例)。但是我不知道实现这一点的最佳方法,我所有的版本都很慢(大约 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)
像这样调整屏幕大小的最有效方法是什么?
答案 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)