pygame:用鼠标绘制一个选择矩形

时间:2016-03-01 03:16:27

标签: python pygame mouse transparency blit

我在pygame中编写了一个简单的突破游戏,正在编写一个关卡编辑器。一切正常,直到我尝试添加一个具有透明外观的选择矩形(就像我桌面背景上的那个)。我可以得到一个矩形(sorta),但其他一切都消失了,它不是半透明的。

代码:

pygame.init()
screen = pygame.display.set_mode(size)
mousescreen = pygame.Surface((screen.get_size())).convert_alpha()

...

在设计循环中:

global xpos, ypos, theBricks, clock, mousedrag, mouseRect
global designing, titles
global theLevels, level, cur_max_level, max_level

mousedrag = False
mouseRect = None
mouseDown = False

while designing:

    events = pygame.event.get()
    for event in events:
        if event.type == pygame.QUIT:
            sys.exit()

        elif event.type == pygame.MOUSEBUTTONDOWN:
            mouseDown = True
            mpos = pygame.mouse.get_pos()
            x_position = mpos[0]
            y_position = mpos[1]

            xpos = ((x_position-left)/BRW) * BRW + left
            ypos = ((y_position-top)/BRH) * BRH + top                   


        elif event.type == MOUSEMOTION:
            if mouseDown:
                newx_pos = mpos[0]
                newy_pos = mpos[1]
                mousedrag = True

                if mousedrag:
                    mouseRect = Rect(newx_pos, newy_pos, xpos, ypos)

        elif event.type == MOUSEBUTTONUP:
            if mousedrag:
                mousedrag = False
            else:
                if is_a_brick(xpos, ypos):
                    del_brick(xpos, ypos)
                else:
                    make_brick(xpos, ypos)

        elif event.type == pygame.KEYDOWN:

            if event.key == pygame.K_q:
                designing = False
                titles = True

...

在更新屏幕功能中:

for bricks in theBricks:
    pygame.draw.rect(screen, GREEN, bricks.rect)

if mousedrag:
    pygame.draw.rect(mousescreen, RED, mouseRect, 50)
    screen.blit(mousescreen, (0,0))

pygame.draw.rect(screen, WHITE, (xpos, ypos, BRW, BRH))

pygame.display.update()

矩形不透明,其他一切都在屏幕上消失了?我哪里错了?

1 个答案:

答案 0 :(得分:0)

我不确定.convert_alpha()是否像您想象的那样创建透明屏幕。尝试明确地在mousescreen上设置alpha级别:

mousescreen = pygame.Surface((screen.get_size()))
mousescreen.set_alpha(100)  # this value doesn't have to be 100 

实现相同效果的另一种方法是将您的矩形直接画在屏幕上4行,这意味着您根本不必使用mousescreen。在更新屏幕功能中:

if mousedrag:
    mouseRectCorners = [mouseRect.topleft, 
                        mouseRect.topright, 
                        mouseRect.bottomright, 
                        mouseRect.bottomleft]
    pygame.draw.lines(screen, RED, True, mouseRectCorners, 50)

只需确保在任何其他对象之后绘制这些线条,否则它们可能会被隐藏。我不确定这个选项是否真的被认为是最佳做法,但选择它总是好的。