【问题标题】:How can I make a pygame surface object from only part of a loaded image? [duplicate]如何仅从加载的图像的一部分制作 pygame 表面对象? [复制]
【发布时间】:2020-07-02 04:15:54
【问题描述】:

多精灵图像的像素完美碰撞

我想做像素完美的碰撞检查。我有一个带有透明背景的PNG格式的6帧精灵,但它们都在一个精灵表上。 (“敌人”精灵各有 2 帧。)我可以为它们设置动画并很好地移动它们。

如何仅从已加载图像的一部分制作 pygame 表面对象?我想我可以单独加载每个精灵帧,但这很费力,而且看起来不像是好的编码。

更多信息

我可以很容易地将整个 spritesheet 变成一个掩码,如下所示(最初在 spritesheet 类中,但在这里进行了简化):

# Load image
sheet = pygame.image.load("spritesheet.png")
# Create mask
sheet_mask = pygame.mask.from_surface(sheet)

我可以简单地使用当前帧的矩形来检测碰撞,但这会非常不令人满意,因为有时碰撞似乎会在没有接触的情况下发生。一个 pygame 有这个很棒的掩码对象来处理这类事情。

在主游戏循环的每个循环中,我想检查一个精灵的适当帧与另一个精灵的适当帧。我一直在尝试为每个帧创建一个蒙版,然后将它们存储在一个列表中。

【问题讨论】:

    标签: python python-3.x pygame bitmask sprite-sheet


    【解决方案1】:

    使用subsurface() 方法从pygame.Surface 获取矩形次表面:

    sheet = pygame.image.load("spritesheet.png")
    
    rect_area = pygame.Rect(left, top, width, heigth)
    sprite_from_sheet = sheet.subsurface(rect_area)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多