2015-01-08 3 views
-1

Я создал поверхность, на которой я использовал пиксельный массив, чтобы помещать пиксели, но я хочу сделать поверхность прозрачной, но оставляя пиксели непрозрачными, я пробовал сделать поверхность прозрачна, а затем рисует пиксели на поверхности, но это просто делает пиксели прозрачными, любую помощь или что-то, что я пропустил?создание прозрачной поверхности для рисования пикселей в pygame

-Edit- Надеется, что это поможет в некотором роде, это объект класса, который создает поверхность, которая является галактикой

Кроме того, я сказал, что я пробовал, там не намного больше, чтобы сказать

class Galaxy(object): 



def __init__(self,posx=0,posy=0,radius=0,depth=0): 
    radius = int(radius) 
    self.size = [radius*2,radius*2,depth] 
    self.posx = posx 
    self.posy = posy 
    self.radius = radius 

    #create array for stars 
    self.starArray = [] 

    #create surface for stars 
    self.surface = pygame.Surface([radius*2,radius*2]) 
    self.starPixel = pygame.PixelArray(self.surface) 

    #populate 
    for x in range(radius*2): 
     for y in range(radius*2): 
      #generate stars 
      num1 = noise.snoise2(x+posx,y+posy,repeatx=radius*10,repeaty=radius*10) 
      distance = math.sqrt(math.pow((x-radius),2)+math.pow((y-radius),2)) 
      if distance < 0: 
       distance = distance * -1 

      #print(x,y,"is",distance,"from",radius,radius) 

      val = 5 

      #glaxy density algorithm 
      num = (num1/(((distance+0.0001)/radius)*(val*10))) * 10 

      #density 
      if num > (1/val): 
       #create star 
       self.starArray.append(Stars(x,y,seed=num1*100000,distance=distance)) 
       #print(num*1000) 
    self.addPixels() 

#adds all star pixels to pixel array on surface 
def addPixels(self): 
    for i in self.starArray: 
     self.starPixel[i.x,i.y] = i.colour 
    del self.starPixel 

#sends to screen to await rendering 
def display(self): 
    screen.displaySurface(self.surface,[self.posx+camPosX,self.posy+camPosY]) 
+1

Есть код, который вы написано, что вы можете показать нам? –

+0

Не особенно, я создал поверхность, затем использовал алгоритм, чтобы заполнить поверхность пикселями, чтобы они напоминали галактику, затем передает поверхность на функцию, чтобы поместить поверхность на экран. – Ctrl

+0

- это то, что вам нужно, чтобы изменить, чтобы заставить работу работать? если это так - мы должны увидеть, что это поможет вам. если нет - тогда ваш вопрос не указан достаточно хорошо ... так или иначе, вы должны сказать нам, что именно вы используете, чтобы добавить эти пиксели на экран ... если у вас есть * написанное программное обеспечение *, чтобы сделать что тогда вам нужно включить его ... если у вас есть только * используемое программное обеспечение *, чтобы сделать это, тогда вы на неправильном сайте, чтобы получить справку ... и, вероятно, вам нужно попробовать SuperUser вместо Stackoverflow (попробуйте посмотреть под Кнопка StackExchange в верхнем левом углу) –

ответ

1

Используйте MyGalaxy.set_colorkey(SomeUnusedRGB), чтобы определить нулевой альфа (невидимый) цвет фона, заполнить MyGalaxy с этим цветом, а затем нарисовать пиксели в верхней части этого. You может использовать pixelArray функции для рисования на эту поверхность, но вы, вероятно, лучше использовать MyGalaxy.set_at(pixelLocationXY, pixelColourRGB) вместо этого из соображений управляемости и производительности.

Убедитесь, что SomeUnusedRGB никогда не совпадает с pixelColourRGB, или эти пиксели не отображаются (поскольку pygame будет интерпретировать их как невидимые). Когда вы blit MyGalaxy туда, где вы хотите, она должна только блистать пикселями, отличными от SomeUnusedRGB, оставив остальные неизменными.

(Это лучшее, что я могу предложить вам, не зная больше о вашем коде;. Пересмотреть вопрос, чтобы включить то, что вы уже пытаетесь, и я буду обновлять этот ответ)

+0

настройка прозрачности с помощью функции set_colorkey, спасибо – Ctrl

+0

Счастлив быть полезным! – Augusta

Смежные вопросы