【问题标题】:Rect won't update position when the sprite it is taken from moves [duplicate]当从它获取的精灵移动时,矩形不会更新位置[重复]
【发布时间】:2020-04-02 17:12:27
【问题描述】:
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 时就会停止。对这些问题中的任何一个问题的任何帮助都会很棒。谢谢!

【问题讨论】:

    标签: python loops pygame sprite rect


    【解决方案1】:

    Sprite 没有方法get_rect。可能Pfront_nSurface。一个表面没有位置,不是,一个表面是blit 在一个位置到另一个表面。 get_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 是一个类。如果你想附加一个pygame.Rect 对象,它代表tile_rects,那么它必须是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 2014-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多