【问题标题】:Set the width and height of a pygame surface设置 pygame 表面的宽度和高度
【发布时间】:2020-06-19 09:12:42
【问题描述】:

我正在使用pygame 创建自己的 GUI 库。我有一个创建 UI 元素的 UIComponent 类。 UI 元素本身是通过self.imagewidthheight 创建的。这个问题是改变宽度和高度似乎不起作用。我正在使用self.rect.x 来修改它的坐标,但是当我尝试使用self.rect.width 时它没有效果。

ui_elements = pg.sprite.Group()


class UIComponent(pg.sprite.Sprite):

    def __init__(self, width, height):
        pg.sprite.Sprite.__init__(self)
        self.width_percent, height_percent = 0, 0
        self.alignments = []
        self.image = pg.Surface((width, height))
        self.rect = self.image.get_rect()
        ui_elements.add(self)

    def set_colour(self, colour_value):
        self.image.fill(colour_value)

    def update(self, win):
        for i in self.alignments:
            i(win)

    def center_x(self, win):
        self.rect.x = (win.s_width/2)-self.image.get_width()/2

    def center_y(self, win):
        self.rect.y = (win.s_height/2)-self.image.get_height()/2

    def relative_width(self, win):
        self.rect.width = 25

    def relative_height(self, win):
        self.rect.height = 25

【问题讨论】:

    标签: python pygame


    【解决方案1】:

    更改self.rect 属性的宽度和高度确实会影响pygame.Surface 的大小。即使将矩形传递给 pygame.Surface.blitdest 参数,当表面 _blit__ 到目标表面上时,也只会考虑矩形的位置。
    您必须通过pygame.transform.scalepygame.transform.smoothscale 将原始图像缩放到所需的大小。
    保留原图(self.original_image),在大小宽高发生变化时创建缩放图:

    self.image = pygame.transform.smoothscale(self.original_image, self.rect.size)
    

    班级UIComponent:

    class UIComponent(pg.sprite.Sprite):
    
        def __init__(self, width, height):
            pg.sprite.Sprite.__init__(self)
            self.width_percent, height_percent = 0, 0
            self.alignments = []
            self.original_image = pg.Surface((width, height))
            self.image = self.original_image
            self.rect = self.image.get_rect()
            ui_elements.add(self)
    
        def set_colour(self, colour_value):
            self.image.fill(colour_value)
    
        def update(self, win):
            for i in self.alignments:
                i(win)
    
        def center_x(self, win):
            self.rect.x = (win.s_width/2)-self.image.get_width()/2
    
        def center_y(self, win):
            self.rect.y = (win.s_height/2)-self.image.get_height()/2
    
        def relative_width(self, win):
            self.rect.width = 25
            self.image = pygame.transform.smoothscale(self.original_image, self.rect.size)
    
        def relative_height(self, win):
            self.rect.height = 25
            self.image = pygame.transform.smoothscale(self.original_image, self.rect.size)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多