2014-02-09 4 views
2

Я работаю над настраиваемыми компонентами gui в pygame, а при создании компонента слайдера я даю слайдеру функцию Draw(parentSurface), которая рисует ползунок на родительскую поверхность при сохранении место нахождения.Как сделать полупрозрачное изображение в pygame динамически

Сейчас это работает, но слайдер хранит два изображения:

  • слайд изображение, динамически сделано из плитки, чтобы соответствовать заданной длине ползунка, измерение с шириной заданной длиной, а высота 3 пикселя; и
  • «выберите» изображение, которое представляет собой небольшой индикатор 8x12, чтобы показать, где находится ползунок.

Проблема заключается в том, что когда я Draw(parentSurface) я делаю это:

def Draw(self, parsurf): 
    '''draw the element on parsurf at the given location''' 
    w1 = self.slider_img.get_width() 
    h1 = self.slider_img.get_height() 
    w2 = self.select_img.get_width() 
    h2 = self.select_img.get_height() 
    self.image = pygame.Surface((w1, h2 + h1)) 
    self.image = ColorMod.Transparency(self.image, 0) 
    self.image.blit(self.slider_img, (0, self.image.get_height()-h1)) 
    x = self.value/self.conversionratio 
    self.image.blit(self.select_img, (x- w2/2, 0)) 
    if self.debug_on: 
     print "attempting to blit to the given surface" 
    parsurf.blit(self.image, self.loc) 

Однако БЛИЦ с черным фоном на self.image. Я хочу, чтобы это было полупрозрачным, чтобы фон мог показать, где нет ничего на self.image. Должен ли я просто отказаться от self.image и нарисовать self.slider_img и self.select_img непосредственно на родительскую поверхность?

ответ

0

Вы должны сделать изображение прозрачным путем вызова self.image.set_alpha((0,0,0)) Также в self.image = pyame.Surface вам нужно изменить его self.image = pygame.Surface((width, height), pygame.SRCALPHA) Я также рекомендую избавиться от self.image = ColorMod.Transparency...

0

Если Surface объект, имя self.slider_img относится к создается динамически, когда вы сначала создаете экземпляр Surface, вы должны позвонить Surface.convert_alpha, чтобы получить Surface с соответствующим пиксельным форматом для значений пикселя в пикселях. Затем вы должны иметь возможность установить альфа на пиксельной основе по мере необходимости.

http://www.pygame.org/docs/ref/surface.html#pygame.Surface.convert_alpha

+0

Насколько я понимаю, идет, если вы используете Windows, это работает, однако, если вы используете Ubuntu (не пробовал на другой ОС Linux), используя 'Surface.convert_alpha()' не работает , – KodyVanRy