Pygame - 如何优化每个像素的填充 - 一个像素一个像素

问题描述

我目前正在编写“幻想地图创建者”。因此,用户处于海洋背景上,并且可以通过圆形光标添加部分陆地。 因此,每次用户保持点击鼠标并移动光标时,它都会绘制该区域。

目前我正在逐个像素地绘制光标区域。我这样做是因为该区域中的每个像素都具有与柏林噪声不同的 RGB 值。

我的问题是,如果我的光标在宽度和高度上超过 100 像素,则根据要一个一个填充的像素数,填充速度会减慢。

那么我的问题是,我怎样才能获得优化的填充?

#This function is called when the user remains clicked on his mouse button

def manage_click(toolbar,layers,land):
    click = True
    while click:
        for event in pygame.event.get():
            if event.type == MOUSEMOTION:
                print_circle_mouse(event.pos) #PRINT THE CURSOR
                land.add_land(mouse_position=event.pos,circle_size=100,color_set=SET_COLOR_PAPYRUS) #METHOD FOR ADD LAND
                display_layers(toolbar,layers)
            if event.type == MOUSEBUTTONUP:
                click = False
    def add_land(self,mouse_position,circle_size,color_set):
        pxarray = pygame.PixelArray(self.bg_surface)
        radius = circle_size // 2
        for i in range(circle_size):
            for j in range(circle_size):
                pos_x =(mouse_position[0] - radius) + i
                pos_y =(mouse_position[1] - radius) + j

                #FirsT I CHECK IF I'M IN THE SURFACE
                if pos_x < self.shape[0] and pos_x > 0 and pos_y < self.shape[1] and pos_y > 0 :
                    #SECOND I CHECK IF THE PIXEL IS ALREADY FILL (1 IS FOR SAY "OK,PIXEL IS FILL)
                    if self.tab_map[pos_x][pos_y] != 1:
                        #BASE_MAP IS AN ARRAY CONTAINING THE VALUES RESULTING FROM A PERLIN NOISE REDUCED TO 2 DIGITS AFTER THE COMMA
                        #COLOR_SET IS A DICT CONTAINING THE DIFFERENT VALUES FROM BASE_MAP AS KEY AND HAVING THE ASSOCIATED RGB COLOR AS VALUES
                        color = color_set[self.base_map[pos_x][pos_y]]
                        pxarray[pos_x,pos_y] = color
                        self.tab_map[pos_x][pos_y] = 1

Example of the result

如上例所示,我想确定每个像素的颜色以创建“逼真”的纹理。

感谢您的帮助!如果我忘记了什么,请告诉我 ;)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)