Отменить цвет смешивания в Pygame - PullRequest
0 голосов
/ 15 декабря 2018

В игре, над которой я работаю с использованием pygame, я пытаюсь добавить hitflash.Для тех, кто не знает, что это такое, хитфлэш - это эффект, когда враг высвечивает цвет - обычно белый - примерно на полсекунды (не цитируйте меня по этому поводу, это мой способ описания).Это можно сделать с помощью функции Surface.fill(), передав дополнительный аргумент.Чтобы добиться эффекта «яркой вспышки», я заливаю изображение белым и смешиваю его.Однако я не знаю, как вернуть изображение к тому, что было до того, как оно было смешано с белым.Я могу легко создавать дубликаты оригинальных изображений и загружать оригинальные, которые не были смешаны, но я считаю, что это слишком неэффективно с тем, с чем я работаю.Есть ли способ / функция, которая позволяет отменять смешивание (то есть возвращать смешанное изображение обратно к нормальному)?

1 Ответ

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

fill Поверхность изменит ее, поэтому я рекомендую менять изображение на более яркую, когда объект получает повреждение.Создайте яркую версию перед циклом while или загрузите другую версию изображения, а затем поменяйте ее местами, назначив текущее изображение другой переменной.

Возможно, вам также нужен таймер, чтобы контролировать, насколько быстро изображение будет сброшено до исходной версии.

Я предлагаю вам сделать это в ваших классах спрайтов, а не в цикле while, как в приведенном ниже минимальном примере.

import pygame as pg


pg.init()
screen = pg.display.set_mode((640, 480))
clock = pg.time.Clock()
BG_COLOR = pg.Color('gray12')
image_normal = pg.Surface((30, 50))
image_normal.fill(pg.Color('dodgerblue'))
image_bright = image_normal.copy()
image_bright.fill((100, 100, 100, 0), special_flags=pg.BLEND_RGBA_ADD)
image = image_normal  # The currently selected image.
timer = 0
dt = 0

done = False
while not done:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            done = True
        elif event.type == pg.MOUSEBUTTONDOWN:
            image = image_bright  # Swap the image.
            timer = .5  # 0.5 seconds.

    timer -= dt
    if timer <= 0:
        image = image_normal  # Set the image back to the normal version.
        timer = 0

    screen.fill(BG_COLOR)
    screen.blit(image, (300, 200))
    pg.display.flip()
    dt = clock.tick(60) / 1000

pg.quit()
...