【问题标题】:Drawing a transparent line in pygame在pygame中画一条透明线
【发布时间】:2020-10-24 06:01:42
【问题描述】:

我需要一种在 pygame 中绘制部分透明线的方法。我找到了这个答案(python - Draw a transparent Line in pygame),但它只适用于直线,不适用于不同的线条粗细。

【问题讨论】:

  • 您可以创建具有透明背景的新 Surface 并绘制任何线条(不透明),然后在具有透明度的主 Surface 中绘制它。
  • 来自您的链接示例的工作方式与我描述的类似 - 但您不必使用fill(),而是使用draw.line()
  • 我是 pygame 新手,你会怎么做(有多个表面)?
  • 如示例一样创建表面并使用fill() 和颜色(0,0,0,0) 创建透明表面(重要的是最后一个零,表示alpha 通道),稍后在此表面上绘制任何线条最后在主表面上粘贴它。我有一些examples on GitHub。最小示例使用draw.circle 绘制透明圆圈。

标签: python pygame


【解决方案1】:

您必须使用alpha 通道创建任意大小的新表面

surface = pygame.Surface((width, height)).convert_alpha()

或使用主表面创建具有相同大小的新表面

surface = screen.convert_alpha()

用透明色(0,0,0,0)填充它。重要的是最后一个零,这意味着 alpha 频道 - (R,G,B,A)

surfaces.fill([0,0,0,0])

使用小于255 的 alpha 通道在此表面上绘制

pygame.draw.line(surface, (0, 0, 0, 32), (0, 0), (800, 600), 5)

最后你可以在任何地方的主页上粘贴它

screen.blit(surface, (x, y))

对于与主表面尺寸相同的表面,它可以是(0,0)

screen.blit(surface, (0,0))

小例子

import pygame

pygame.init()

screen = pygame.display.set_mode((800,600))#, depth=32)

surface1 = screen.convert_alpha()
surface1.fill([0,0,0,0])
pygame.draw.circle(surface1, (255, 0, 0, 128), (325, 250), 100)

surface2 = screen.convert_alpha()
surface2.fill([0,0,0,0])
pygame.draw.circle(surface2, (0, 255, 0, 128), (475, 250), 100)

surface3 = screen.convert_alpha()
surface3.fill([0,0,0,0])
pygame.draw.circle(surface3, (0, 0, 255, 128), (400, 350), 100)

surface4 = screen.convert_alpha()
surface4.fill([0,0,0,0])
pygame.draw.line(surface4, (0, 0, 0, 32), (0, 0), (800, 600), 5)
pygame.draw.line(surface4, (0, 0, 0, 32), (0, 600), (800, 0), 5)

surface5 = screen.convert_alpha()
surface5.fill([0,0,0,0])
pygame.draw.polygon(surface5, (255, 0, 0, 128), [(400, 250), (450, 300), (400, 350), (350, 300)])

screen.fill([255,255,255]) # white background
screen.blit(surface1, (0,0))
screen.blit(surface2, (0,0))
screen.blit(surface3, (0,0))
screen.blit(surface4, (0,0))
screen.blit(surface5, (0,0))

pygame.display.flip()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                running = False

pygame.quit()    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2020-12-14
    • 2016-11-03
    • 2023-03-06
    • 2021-06-04
    • 1970-01-01
    相关资源
    最近更新 更多