python - Pygame 不会将图像传输到 Canvas 上

标签 python pygame blit

我在我正在开发的一个小项目中为 gui 制作了一个图标,但 pygame 不显示它。我做错了什么?

import pygame
black = (0,0,0)
toolscanvas = pygame.Surface((700,120))

pygame.init()
gameDisplay = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
gameDisplay.fill(black)
gameDisplay.convert()
clock = pygame.time.Clock()


class GuiHouse:
    def __init__(self):
        self.x = 0
        self.y = 20
        self.canvas = pygame.Surface((300,300))
        self.canvas.set_alpha(128)
        self.iconed = pygame.image.load("house_icon.png").convert_alpha()
        self.iconed = pygame.transform.scale(self.iconed, (60, 60))
    def display(self):
        global toolscanvas
        toolscanvas.fill((0,0,0))
        self.canvas.blit(self.iconed, (0, 0))
        toolscanvas.blit(self.canvas, (self.x, self.y))
        gameDisplay.blit(toolscanvas,(0,0))


guihouse = GuiHouse()
while True:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                pygame.quit()
                quit()
    guihouse.display()
    pygame.display.update()
    clock.tick(120)

真正的代码要长得多,如果不起作用请告诉我。 图标应如下所示 house_icon

最佳答案

有两个小错误

  1. 您忘记在 pygame 主显示屏上绘制 toolscanvas (gameDisplay.blit(toolscanvas, (0, 0)))
  2. 使用 alfa channel 读取图像,并且只有黑色像素。所以你正在黑色背景上绘制黑色图片。在示例解决方案中,我添加了白色的填充图像 Canvas ,因此现在图像可见,但不漂亮。但我希望你能找到更好的解决方案:)

示例解决方案:

black = (0, 0, 0)
white = (255, 255, 255)
toolscanvas = pygame.Surface((700, 120))

pygame.init()
gameDisplay = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
gameDisplay.fill(black)
gameDisplay.convert()
clock = pygame.time.Clock()


class GuiHouse:
    def __init__(self):
        self.x = 0
        self.y = 20
        self.canvas = pygame.Surface((300, 300))
        self.canvas.set_alpha(128)
        self.canvas.fill(white)
        self.iconed = pygame.image.load("house_icon.png").convert_alpha()
        self.iconed = pygame.transform.scale(self.iconed, (60, 60))

    def display(self):
        global toolscanvas
        toolscanvas.fill((0, 0, 0))
        self.canvas.blit(self.iconed, (0, 0))
        toolscanvas.blit(self.canvas, (self.x, self.y))
        gameDisplay.blit(toolscanvas, (0, 0))

guihouse = GuiHouse()
while True:
    guihouse.display()
    pygame.display.update()
    clock.tick(120)

关于python - Pygame 不会将图像传输到 Canvas 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52726889/

相关文章:

c++ - 设置每个像素的最快方法

python - 如何在 tensorflow 数据集中加载 numpy 数组

python - 只能将元组(不是 "int")连接到元组

python - 你如何启动 Pygame 窗口最大化?

python - pygame图像碰撞问题

python - Pygame:如何旋转表面积而不使图像闪烁两次?

Python - 带子图的 blit 仅绘制最后一个子图

python - 从 Pivot reshape 和选择 Pandas

python - legend() 如何处理动态数据集?

具有更新队列和输出队列的 Python 多处理