-1

我创建了一个使用像素阵列放置像素的表面,但我想让表面透明但让像素不透明,我尝试让表面透明然后将像素绘制到表面但那只是使像素也透明,任何帮助或我错过了什么?

-编辑-希望这会有所帮助,这是创建银河系表面的类对象

另外我已经说明了我尝试过的内容,没有太多要说的了

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])
4

1 回答 1

1

用于MyGalaxy.set_colorkey(SomeUnusedRGB)定义零 alpha(不可见)背景颜色,填充MyGalaxy该颜色,然后在其上绘制像素。您可以使用函数来绘制到该表面,但出于可管理性和性能的原因,pixelArray您可能更好地使用它。MyGalaxy.set_at(pixelLocationXY, pixelColourRGB)

确保它SomeUnusedRGB永远不会与 any 相同pixelColourRGB,否则这些像素不会出现(因为 pygame 会将它们解释为不可见)。当你将 MyGalaxy blit 到任何你想要的地方时,它应该只 blit 非 SomeUnusedRGB 彩色像素,其余的保持不变。

(这是我在不了解您的代码的情况下可以为您提供的最好的方法;修改问题以包含您已经尝试的内容,我将更新此答案。)

于 2015-01-09T00:45:19.327 回答