web-dev-qa-db-ja.com

Pygame:背景色を変更する方法

import pygame, sys
pygame.init()
screen = pygame.display.set_mode([800,600])
white = [255, 255, 255]
red = [255, 0, 0]
screen.fill(white)
pygame.display.set_caption("My program")
pygame.display.flip()



background = input("What color would you like?: ")
if background == "red":
    screen.fill(red)

running = True
while running:
    for i in pygame.event.get():
        if i.type == pygame.QUIT:
        running = False
        pygame.quit()

ユーザーにどのような背景色を使用したいかを尋ねようとしています。ユーザーが赤を書いた場合、色は変わらず、白のままです。

3
user7307944

次に表示を更新すると、赤で再描画されます。 pygame.display.update()を追加します:

_background = input("What color would you like?: ")
if background == "red":
    screen.fill(red)
    pygame.display.update()
_

または、(条件付きで)背景色を変更した後にpygame.display.flip()を移動することもできます。

参照 pygame.display.updateとpygame.display.flipの違い

5
e0k

現在の色を保存する変数を作成します。

currentColor = (255,255,255) # or 'white', since you created that value

_background = input("What color would you like?: ")
if background == "red":
    currentColor = red # The current color is now red
_

ループの中:

_while running:
    for i in pygame.event.get():
        if i.type == pygame.QUIT:
            running = False
            pygame.quit()

    screen.fill(currentColor) # Fill the screen with whatever the stored color is. 

    pygame.display.update() # Refresh the screen, needed whatever the color is, so don't remove this
_

したがって、画面の色を変更する必要がある場合は、currentColorを必要な色に変更するだけで、画面が自動的にその色に変わります。例:

_if foo:
    currentColor = (145, 254, 222)
Elif bar:
    currentColor = (215, 100, 91)
_

ところで、red = (255, 0, 0)のように、色をリストではなくタプルとして保存する方が良いと思います。

また、ループ内以外の場所ではpygame.display.update(またはフリップ)は必要ありません。この関数の機能は、描画されたすべてのアイテムの最新の形状/値を取得して画面にプッシュするだけなので、ループの最後のアイテムとしてのみ必要なので、すべてが表示されます。

0
underscoreC