python - 位图时如何在pygame中使PNG画布透明
问题描述
我想pawnPic
在屏幕上闪烁并让背景“不可见”或“透视”。现在,白色的帆布挡住了整个棋盘块,所以看起来很糟糕。这是我使用的缩短代码。
FPS = 30
black = (0,0,0)
white = (255, 255, 255)
brown = (139, 69, 19)
lBrown = (235, 188, 128)
HEIGHT, WIDTH = 960, 960
game_display = pygame.display.set_mode((HEIGHT, WIDTH))
pygame.display.set_caption("Chess")
boxL = int(((HEIGHT-40) / 8))
clock = pygame.time.Clock()
pawnPic = pygame.image.load(r'C:\Users\Adjun\Dropbox\My PC (DESKTOP-BHG02HU)\Pictures\Saved Pictures\pawnPic.png')
pawnPic = pygame.transform.scale(pawnPic, (115, 115))
pawn1X = boxL * 3 + 20
pawn1Y = boxL * 5 + 20
Exit_game = True
while Exit_game:
clock.tick(FPS)
mouse_x, mouse_y = pygame.mouse.get_pos()
for event in pygame.event.get():
if event.type == pygame.QUIT:
Exit_game = False
game_display.fill(white)
for i in range(4):
i += 1
pygame.draw.rect(game_display, lBrown, (115 * i * 2 - 210, 20, 115, 115), 0)
pygame.draw.rect(game_display, lBrown, (115 * i * 2 - 95, 135, 115, 115), 0)
pygame.draw.rect(game_display, lBrown, (115 * i * 2 - 210, 250, 115, 115), 0)
pygame.draw.rect(game_display, lBrown, (115 * i * 2 - 95, 365, 115, 115), 0)
pygame.draw.rect(game_display, lBrown, (115 * i * 2 - 210, 480, 115, 115), 0)
pygame.draw.rect(game_display, lBrown, (115 * i * 2 - 95, 595, 115, 115), 0)
pygame.draw.rect(game_display, lBrown, (115 * i * 2 - 210, 710, 115, 115), 0)
pygame.draw.rect(game_display, lBrown, (115 * i * 2 - 95, 825, 115, 115), 0)
pygame.draw.rect(game_display, brown, (115 * i * 2 - 95, 20, 115, 115), 0)
pygame.draw.rect(game_display, brown, (115 * i * 2 - 210, 135, 115, 115), 0)
pygame.draw.rect(game_display, brown, (115 * i * 2 - 95, 250, 115, 115), 0)
pygame.draw.rect(game_display, brown, (115 * i * 2 - 210, 365, 115, 115), 0)
pygame.draw.rect(game_display, brown, (115 * i * 2 - 95, 480, 115, 115), 0)
pygame.draw.rect(game_display, brown, (115 * i * 2 - 210, 595, 115, 115), 0)
pygame.draw.rect(game_display, brown, (115 * i * 2 - 95, 710, 115, 115), 0)
pygame.draw.rect(game_display, brown, (115 * i * 2 - 210, 825, 115, 115), 0)
pygame.draw.rect(game_display, black, (20, 20, 920, 920), 1)
game_display.blit(pawnPic, (pawn1X, pawn1Y))
pygame.display.update()
另外,如果有人知道,如果我有多个 blitted 棋子,我如何让 pygame 知道鼠标在哪个图像上,而不用 pygame 检查每个像素或每个棋盘点
解决方案
国际象棋图案使用“segoeuisymbol”系统字体而不是图像。请参阅Segoe UI Symbol 字体支持的 Unicode 字符。例如,WHITE CHESS PAWN 的 Unicode 字符是 '\u2659':
seguisy115 = pygame.font.SysFont("segoeuisymbol", 115)
pawnChar = '\u2659'
pawnPic = seguisy115 .render(pawnChar, True, black)
推荐阅读
- java - Java如何所有String对象都是不可变的?
- javascript - jQuery为什么在回调函数“窗口”中是$(this)?
- javascript - selenium-webdriver 在 javascript 中找不到驱动程序?
- javascript - 数组的 SetState
- xcode - 无法在 Xcode 11 中构建 GLFW 项目
- python - 使用 django 模型方法作为静态函数
- node.js - 如何防止 NodeJs 中的会话劫持?
- kubernetes - ValidationError:io.k8s.api.v1.DeploymentSpec 中缺少必填字段“选择器”
- html - 在离子中设置背景不起作用
- python - 使用子图的标准误差条形图