Как сделать так, чтобы объект выцветал в Pygame? - PullRequest
1 голос
/ 05 апреля 2020

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

Я пытался так (просто для перехода от от красного к желтому):

colorR = 0
colorG = 255
colorB = 0
change = True
while change:
     pygame.draw.rect(win, (colorR, colorG, colorB), (10, 10, 200, 50), 0)
     colorR += 1
     if colorR == 255:
          print("done")

Я также пытался сделать это с for i in range(0, 255):

Это говорит pygame.draw.rect(win, (colorR, colorG, colorB), (10, 10, 200, 50), 0) TypeError: invalid color argument

Но когда я просто рисую прямоугольник, как это :

colorR = 0
colorG = 255
colorB = 0
pygame.draw.rect(win, (colorR, colorG, colorB), (10, 10, 200, 50), 0)

прямоугольник отображается зеленым цветом.

Мой метод верен или нет. сделать это по-другому? Спасибо за ответ

edit: вот и вся программа, возможно, там есть ошибки, потому что прямоугольник не появляется до того, как он приобретет свой окончательный цвет

import pygame, math
pygame.init()
length = 1440
heigth  = 700
win = pygame.display.set_mode((length, heigth))#, pygame.FULLSCREEN)
menuImg = pygame.image.load('menu_img.jpg')
laser = pygame.image.load('projectile.png')
clock = pygame.time.Clock()
game = False
def rgw():  
    win.fill((0, 0, 255))
    if game:
        print("game")
        colorR = 0
        colorG = 255
        colorB = 0
        change = True
        while change:
            pygame.draw.rect(win, (colorR, colorG, colorB), (10, 10, 200, 50), 0)
            colorR += 1
            if colorR == 255:
                change = False
        pygame.display.flip()
    pygame.display.update()
run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            game = True

        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_BACKSPACE:
                run = False

    rgw()
pygame.quit()

1 Ответ

1 голос
/ 05 апреля 2020

Чтобы внести изменения в видимую поверхность дисплея, вы должны позвонить pygame.display.flip() или pygame.display.update(). Кроме того, я рекомендую обрабатывать события либо pygame.event.get(), либо pygame.event.pump().
Обратите внимание, что вы должны сделать задержку в l oop, в противном случае цвет быстро исчезнет. Если цвет не находится в диапазоне [0, 255], вы получите ошибку «Недопустимый аргумент цвета». Это происходит потому, что l oop в вашем примере никогда не заканчивается. В любом случае вы пропустили change = False.

, поскольку у вас есть приложение l oop, вам не нужно делать затухание в отдельном l oop. Используйте основное приложение l oop:

game = True
colorR = 0
colorG = 255
colorB = 0
def rgw(): 
    global colorR, colorG, colorB
    win.fill((0, 0, 255))
    if game:
        pygame.draw.rect(win, (colorR, colorG, colorB), (10, 10, 200, 50), 0)
        if colorR < 255:
            colorR += 1
    pygame.display.update()

run = True
while run:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            game = True
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_BACKSPACE:
                run = False

    rgw()

pygame.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...