Pygame BLEND_RGBA_ADD与screen.blit

时间:2018-12-14 16:49:38

标签: python pygame blending

我正在用python创建游戏,并希望使敌人以任何方式受到破坏时都闪烁白色。为此,我尝试使用特殊的混合标志将敌人扫向屏幕。但是,我不知道如何指定图像应与哪种颜色和Alpha值混合。当我尝试在BLEND_RGBA_ADD之后添加RGBA的值时,它会产生错误“ TypeError:'int'对象不可调用”,由于颜色必须为int,所以我无法理解。

if (thrd_join(thrd, NULL) != thrd_success)
            rd_kafka_log(rk, LOG_ERR, "DESTROY",
                         "Failed to join main thread: %s "
                         "(was process forked?)",
                         rd_strerror(errno));

1 个答案:

答案 0 :(得分:0)

pygame.BLEND_RGBA_ADD是一个常量整数,因此您不能将参数传递给它。当您将其作为special_flagsSurface.blit的{​​{1}}参数传递时,将使用addition混合模式进行填充/填充。如果要使图像更亮,则可以将其填充为非黑色,并使用0作为Alpha值,以使Alpha通道不受影响。 (在此示例中,按 A 可以提高亮度。)

Surface.fill

请注意,import pygame as py py.init() clock = py.time.Clock() screen = py.display.set_mode((400, 700)) image = py.image.load('image.png').convert_alpha() while True: clock.tick(60) for event in py.event.get(): if event.type == py.QUIT: py.quit() exit() if event.type == py.KEYDOWN and event.key == py.K_a: image.fill((100, 100, 100, 0), special_flags=py.BLEND_RGBA_ADD) screen.fill((0,0,0)) screen.blit(image, (100,100)) py.display.flip() 的表面将改变原始表面。我认为您实际要做的是在物体损坏时将图像换成更亮的版本。

在while循环之前创建明亮版本,或加载图像的另一个版本,然后通过将当前图像分配给另一个变量来交换它。 (顺便说一下,请致电fillconvert()来大幅度提高blit的性能。)

convert_alpha()