pygame绘制带有剪切区域的生活栏

时间:2015-05-18 10:45:25

标签: pygame

我想通过使用剪辑区域来绘制带有pygame的生活栏(例如,当一半的生命点消失时,将区域限制为一半。) 但即使裁剪区域正确,我总能得到完整的图像。

这是我的生活栏课:

class Lifebar():
    def __init__(self,x,y,images,owner):
        self.x=x
        self.y=y
        self.images=images
        self.owner=owner
        self.owner.world.game.addGUI(self)
        self.inter=False

    def getValues(self):
        value1 = 1.0 * self.owner.hitpoints
        value2 = 1.0 * self.owner.maxhitpoints
        return [value1,value2]

    def render(self,surface):
        rendervalues = self.getValues()
        maxwidth = self.images[0].get_width()
        ratio = rendervalues[0] / rendervalues[1]
        actwidth = int(round(maxwidth * ratio))
        surface.blit(self.images[0],(self.x,self.y))
        surface.set_clip(self.x, 0, (self.x+actwidth), 1080)
        surface.blit(self.images[1],(self.x,self.y))
        self.owner.world.game.setclipDefault()
        surface.blit(self.images[2],(self.x,self.y))

我检查了生命值是否已满并且裁剪区域在x方向受到限制。 (get_clip()) 我不知道我是否误解了set_clip()是如何工作的,因为我之前只将它用于整个屏幕(部分在屏幕外的对象)

1 个答案:

答案 0 :(得分:0)

pygame.Surface对象.set_clip()方法在您调用.blit()时设置将绘制其他任何曲面的区域。这意味着传递的矩形定义目标表面上的新原点以及将要更新的区域的大小。

剪切图像的特定区域并将其绘制到曲面上,您可以将可选矩形作为第三个参数传递给.blit()方法:

surface.blit(source_image, #source image (surface) which you want to cut out
             (destination_x, destination_y), #coordinates on the destination surface
             (x_coordinate, y_coordinate, width, height)) #"cut out"-rect

我希望这会对你有所帮助:)。