当从中取出的精灵移动时,Rect 不会更新位置

Rect won't update position when the sprite it is taken from moves

player_rect = Pfront_n.get_rect()

这里 'Pfront_n' 是一个精灵,我正在为那个精灵获取一个矩形。这是在主循环之外。在主循环中,print(player_rect) 显示当我的播放器移动时,矩形不跟随。我的球员运动系统是基于速度的,如果这有什么不同的话。我怎样才能让 rect 留在播放器周围?

接下来,我还有一个类似的问题...

for layer in room2:
        r_x = 0
        for tile in layer:  
            if tile == '2':
                bat_create()    
            if tile == '1':
                screen.blit(grass, (r_x*40, r_y*40))        
            if tile != '0':
                tile_rects.append(pygame.Rect)
            r_x += 1
        r_y += 1 

在主循环之外,我为 grass 创建了一个矩形,就像我为播放器创建的一样。我在上面的代码中使用的方法有多个 grass 块出现在数组预先确定的位置。如何获得每个 grass 块的矩形? 上下文的相当不相关的旁注 - 最终目标是使用我的玩家 rect,并且 grass rect 所以我的玩家在击中 grass 时停止。对这些问题中的任何一个的任何帮助都会很棒。谢谢!

classSprite没有方法get_rect。大概 Pfront_n 是一个 Surface。表面没有位置,不是,表面在另一个表面上的某个位置 blitget_rect() 返回的 x 和 y 坐标是 (0, 0)。但是你可以设置位置。 get_rect 的关键字参数设置为 pygame.Rect 的相应虚拟属性。例如:
(player_x,player_y应该是玩家的位置)

player_rect = Pfront_n.get_rect(topleft = (player_x, player_y)) 

tile_rects.append(pygame.Rect) 应该做什么? pygame.Rect 是一个 class。如果你想附加一个 pygame.Rect 对象,它表示 tile_rects 的一个图块,那么它必须是:

tile_rects.append(pygame.Rect(r_x*40, r_y*40, 40, 40))