Pygame BLEND_RGBA_ADD с screen.blit - PullRequest
       34

Pygame BLEND_RGBA_ADD с screen.blit

0 голосов
/ 14 декабря 2018

Я создаю игру на python и хочу, чтобы враги вспыхнули белым, когда они каким-либо образом повреждены.Для этого я пытаюсь вывести врагов на экран с помощью специального флага смешивания.Однако я не знаю, как указать, с каким цветом и альфа-значением следует смешивать изображение.Когда я пытаюсь добавить значения для RGBA после BLEND_RGBA_ADD, это создает ошибку «TypeError:« int »объект не может быть вызван», которую я не понимаю, потому что цвет должен быть int.

import pygame as py

py.init()
clock = py.time.Clock()

screen = py.display.set_mode((400,700))

image =py.image.load('image.png')
alpha = 0

while True:
    clock.tick(60)
    blending = (255,255,255,alpha)
    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:
            if alpha < 245:
                alpha +=10
        if event.type == py.KEYDOWN and event.key == py.K_d:
            if alpha >10:
                alpha -=10

    screen.fill((0,0,0))
    screen.blit(image,(100,100),area = None,special_flags=py.BLEND_RGBA_ADD(blending))
    py.display.flip()

1 Ответ

0 голосов
/ 15 декабря 2018

pygame.BLEND_RGBA_ADD - это постоянное целое число, поэтому вы не можете передавать ему аргументы.Когда вы передаете его в качестве аргумента special_flags в Surface.blit или Surface.fill, режим смешивания добавочный будет использоваться для заполнения / заполнения.Если вы хотите сделать свое изображение ярче, вы можете залить его не черным цветом и использовать 0 в качестве альфа-значения, чтобы альфа-канал не изменялся.(Нажмите A , чтобы увеличить яркость в этом примере.)

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()

Обратите внимание, что fill поверхность изменяет исходную поверхность.Я думаю, что вы действительно хотите сделать, это поменять изображение на более яркую версию, когда объект получает повреждение.

Создайте яркую версию перед циклом while или загрузите другую версию изображения, а затем поменяйте местами, назначивтекущее изображение в другую переменную.(Между прочим, звоните convert() или convert_alpha(), чтобы значительно улучшить производительность блиц).

image = py.image.load('image.png').convert_alpha()
bright_image = image.copy()
bright_image.fill((100, 100, 100, 0), special_flags=py.BLEND_RGBA_ADD)
current_image = image  # Assign the current image to another variable.

# In the main `while` loop.
# Swap the image when something happens.
current_image = bright_image
screen.blit(current_image, (100,100))
...