Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pygame中调整窗口大小后如何调整曲面元素的大小?_Python_Pygame - Fatal编程技术网

Python 在pygame中调整窗口大小后如何调整曲面元素的大小?

Python 在pygame中调整窗口大小后如何调整曲面元素的大小?,python,pygame,Python,Pygame,我想能够调整我的扫雷游戏的表面大小。 我已经读过了,但它只对50%有效。 我确实通过event.dict['size']获得了新的宽度和高度(调整大小后),但是图像没有正确定位,我不知道为什么,因为代码在逻辑上看起来是正确的 这是正常窗口: 当我向右展开窗口时,它如下所示: 当我把它缩小时,它看起来是这样的: 为什么呢?以下是我编写的代码: if event.type == pg.VIDEORESIZE: new_w, new_h = event.dict['size']

我想能够调整我的扫雷游戏的表面大小。 我已经读过了,但它只对50%有效。 我确实通过
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)
我所做的是:
在用户用鼠标调整窗口大小后,如果瓷砖无法完全嵌入窗口,我会调整窗口大小。

请提供完整代码,以便我们进行测试