【问题标题】:pygame: drawing a selection rectangle with the mousepygame:用鼠标绘制一个选择矩形
【发布时间】:2016-03-01 03:16:27
【问题描述】:

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

代码:

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()

矩形不透明,其他所有内容都消失在屏幕上?我哪里错了?

【问题讨论】:

    标签: python pygame mouse transparency blit


    【解决方案1】:

    我不确定 .convert_alpha() 是否像您想象的那样创建了一个透明屏幕。尝试在鼠标屏幕上显式设置 alpha 级别:

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

    实现相同效果的另一种方法是将矩形作为 4 行直接绘制到屏幕上,这意味着您根本不需要鼠标屏幕。在您的更新屏幕功能中:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 2018-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多