Python 为什么我的图像周围有一条粗黑线?
在Pygame中,我编写了一个扫雷舰克隆。但是,当我在最后一张图片中显示你输了或你赢了时,我得到了以下结果: 我相信你会注意到文本周围有一条粗黑线。以下是将图像快速显示到窗口的功能:Python 为什么我的图像周围有一条粗黑线?,python,pygame,Python,Pygame,在Pygame中,我编写了一个扫雷舰克隆。但是,当我在最后一张图片中显示你输了或你赢了时,我得到了以下结果: 我相信你会注意到文本周围有一条粗黑线。以下是将图像快速显示到窗口的功能: def play(): SIZE = (WIDTH, HEIGHT) = (16, 16) MINES = 40 PIXELS_PER_CELL = 30 pygame.init() screen = pygame.display.set_mode((WIDTH * PIX
def play():
SIZE = (WIDTH, HEIGHT) = (16, 16)
MINES = 40
PIXELS_PER_CELL = 30
pygame.init()
screen = pygame.display.set_mode((WIDTH * PIXELS_PER_CELL,
HEIGHT * PIXELS_PER_CELL))
pygame.display.set_caption("PyMines")
board = create_board(SIZE, MINES)
board.draw(screen)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif (event.type == pygame.MOUSEBUTTONDOWN and board.is_playing and
not board.is_solved):
board.mouse_handler(event, screen)
message = None
if not board.is_playing:
board.show_mines(screen)
message = pygame.image.load("images/lose.png").convert_alpha()
elif board.is_solved:
message = pygame.image.load("images/win.png").convert_alpha()
if message:
message = pygame.transform.scale(message, (screen.get_width(),
screen.get_height() //
5))
screen.blit(message, (0, 0))
pygame.display.update()
由于我不确定您应该查看的代码的哪一部分是完整代码
我认为这种行为如此奇怪的另一个原因是,当我第一次创建PyMines时,图像以如此完美的方式闪烁(如您所见,文本上有一个非常轻微的阴影):
然而,这并不是一个优化版本,因为在每个周期后,整个电路板都会被重新绘制(因此,如第一幅图所示,在16x16电路板上需要很长时间,所以我使用了9x9,但结果是相同的)。以下是原始版本的play()
函数:
def play():
SIZE = (WIDTH, HEIGHT) = (9, 9)
MINES = 10
PIXELS_PER_CELL = 30
pygame.init()
screen = pygame.display.set_mode((WIDTH * PIXELS_PER_CELL,
HEIGHT * PIXELS_PER_CELL))
pygame.display.set_caption("PyMines")
board = create_board(SIZE, MINES)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif (event.type == pygame.MOUSEBUTTONDOWN and board.is_playing and
not board.is_solved):
board.mouse_handler(event, screen)
message = None
if not board.is_playing:
board.show_mines()
message = pygame.image.load("lose.png").convert_alpha()
elif board.is_solved:
message = pygame.image.load("win.png").convert_alpha()
board.draw(screen)
if message:
message = pygame.transform.scale(message, (screen.get_width(),
screen.get_height() //
5))
screen.blit(message, (0, 0))
pygame.display.update()
我会附加一个完整代码的链接,但是pastebin已经关闭,没有奇怪的黑线的原始游戏的完整代码也关闭了
编辑:我已经尝试删除了convert\u alpha()
并添加了convert()
,甚至什么都没有
.convert()
:
什么都没有:
为什么所有这些黑线都在那里,我如何去除它们,我应该使用哪个版本(
convert
/convert\u alpha
/无任何内容)。文本有一个带alpha通道的黑色阴影。在原始版本中,渲染电路板,然后渲染文本,阴影与电路板混合
在修订版本中,渲染棋盘,然后在其上重复渲染文本。在第一个过程中,它正确渲染,阴影与电路板混合。在第二个过程中,阴影与已渲染的阴影混合,形成稍暗的阴影。在下一个过程中,阴影会稍微变暗,以此类推
如果不严格控制混合内容,就无法使用alpha混合。每次渲染文本时,如果不是整个棋盘,至少需要渲染文本后面的棋盘部分。问题似乎在于
pygame.image.load(“images/lose.png”).convert_alpha()
。表示加载的图像可能会被更改。您应该改用.convert()
方法。@ashishnitinpail已经尝试过了,它会创建一个坚实的黑色背景,而将convert()
完全删除会创建一条污浊的黑色线条可能是在transform.scale()
期间创建的。创建具有预期大小的图像。我可以在transform.scale()
之前查看图像吗?也许原始图像在文本周围有一个黑色的细轮廓,并且该轮廓按比例展开。