Python 在pygame中调整窗口大小后如何调整曲面元素的大小?
我想能够调整我的扫雷游戏的表面大小。 我已经读过了,但它只对50%有效。 我确实通过Python 在pygame中调整窗口大小后如何调整曲面元素的大小?,python,pygame,Python,Pygame,我想能够调整我的扫雷游戏的表面大小。 我已经读过了,但它只对50%有效。 我确实通过event.dict['size']获得了新的宽度和高度(调整大小后),但是图像没有正确定位,我不知道为什么,因为代码在逻辑上看起来是正确的 这是正常窗口: 当我向右展开窗口时,它如下所示: 当我把它缩小时,它看起来是这样的: 为什么呢?以下是我编写的代码: if event.type == pg.VIDEORESIZE: new_w, new_h = event.dict['size']
event.dict['size']
获得了新的宽度和高度(调整大小后),但是图像没有正确定位,我不知道为什么,因为代码在逻辑上看起来是正确的
这是正常窗口:
当我向右展开窗口时,它如下所示:
当我把它缩小时,它看起来是这样的:
为什么呢?以下是我编写的代码:
if event.type == pg.VIDEORESIZE:
new_w, new_h = event.dict['size']
if state.current_state == "Game":
game.cell_width = new_w//game.COLUMNS
game.cell_height = new_h//game.ROWS
game_handler.render()
游戏处理器功能:
def render(self):
for cell in self.game.cells:
img = pg.image.load(cell.cell_img_path)
img = pg.transform.scale(img,(self.game.cell_width,self.game.cell_height))
self.display.blit(img, (cell.column*self.game.cell_width,cell.row*self.game.cell_height))
pg.display.update()
如果你希望瓷砖是正方形的,那么你必须计算瓷砖的最小宽度和高度。您必须将窗口大小和瓷砖数量的商四舍五入,以确保所有瓷砖都适合窗口:
def div_四舍五入(a、b):
返回a//b+(a%b>0)
tile\u width=div\u round\u up(新的、游戏列)
平铺高度=分区向上取整(新建,游戏行)
方形尺寸=最小值(瓷砖宽度、瓷砖高度)
game.cell\u width=正方形大小
game.cell\u高度=正方形大小
答案是检查是否所有的瓷砖都能放进窗户。由于分片的位置必须是整数(每个像素1),因此在调整大小后,第一行的(例如)20个分片可能无法装入窗口,例如,调整大小后窗口的宽度为900像素。但是如果窗口的大小调整为1000像素宽度,那么20个平铺将再次适合,因为1000%20==0
因此,解决办法是:
if event.type == pg.VIDEORESIZE:
new_w, new_h = event.dict['size']
if new_w % game.COLUMNS != 0 or new_h % game.ROWS != 0:
delta_width = new_w % game.COLUMNS
delta_height = new_h % game.ROWS
SCREEN = pg.display.set_mode((new_w - delta_width, new_h - delta_height), pg.RESIZABLE)
else:
SCREEN = pg.display.set_mode((new_w, new_h), pg.RESIZABLE)
我所做的是:
在用户用鼠标调整窗口大小后,如果瓷砖无法完全嵌入窗口,我会调整窗口大小。请提供完整代码,以便我们进行测试