Sie haben etwas Unordnung im Code. Sie verwenden set_mode
dreimal, aber es wird verwendet, um Fenster, nicht Oberflächen zu erstellen. Pygame hat pygame.Surface(), um eine Oberfläche zu erstellen.
Hauptproblem ist alpha
.
PyGame hat zwei Arten von alpha:
- pro Pixel alpha - jedes Pixel eigenen Alpha-Wert hat (. Dh Bild mit transparentem Hintergrund)
- volle Oberfläche alpha - pygame verwendet denselben alpha für alle Pixel (. dh glatt zeigen/verstecken Bild)
PyGame nicht beide in einer Oberfläche verwenden - siehe set_alpha
Sie müssen erstellen Text mit Hintergrund und dann können Sie set_alpha
import pygame
import sys
# --- constants --- (UPPER_CASE names)
LIGHTCYAN = (191, 255, 255)
BLACK = ( 0, 0, 0)
WHITE = (255, 255, 255)
SIZE = (425, 550)
# --- classes --- (CamelCase names)
# empty
# --- functions --- (lower_case names)
def title():
# init
pygame.init()
# create window
screen = pygame.display.set_mode(SIZE)
screen_rect = screen.get_rect()
# create fonts
title_font = pygame.font.SysFont("Calibri", 36)
subtitle_font = pygame.font.SysFont("Calibri", 24)
# render surface with text (and background) and center on screen
text = title_font.render("NOW I SEE", True, BLACK, LIGHTCYAN) # WHITE)
text = text.convert()
text_rect = text.get_rect(center=screen_rect.center)
text_alpha = 0
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
pygame.quit()
sys.exit()
# change "full surface alpha"
if text_alpha < 255:
text_alpha += 1
text.set_alpha(text_alpha)
print(text_alpha)
# draw everything on `screen`
screen.fill(LIGHTCYAN)
screen.blit(text, text_rect)
pygame.display.flip()
pygame.time.wait(10)
# --- main ---
title()
EDIT: komplexere Version :)
import pygame
import sys
# --- constants --- (UPPER_CASE names)
LIGHTCYAN = (191, 255, 255)
BLACK = ( 0, 0, 0)
WHITE = (255, 255, 255)
SIZE = (425, 550)
# --- classes --- (CamelCase names)
# empty
# --- functions --- (lower_case names)
def title(message, screen, scree_rect):
# create fonts
title_font = pygame.font.SysFont("Calibri", 36)
subtitle_font = pygame.font.SysFont("Calibri", 24)
# render surface with text (and background) and center on screen
text = title_font.render(message, True, BLACK, LIGHTCYAN) # WHITE)
text = text.convert()
text_rect = text.get_rect(center=screen_rect.center)
text_alpha = 0
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
return False # to skip rest of program
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
return True
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
return True
# change "full surface alpha"
if text_alpha < 255:
text_alpha += 1
text.set_alpha(text_alpha)
print(text_alpha)
# draw everything on `screen`
screen.fill(LIGHTCYAN)
screen.blit(text, text_rect)
pygame.display.flip()
pygame.time.wait(10)
# --- main ---
# init
pygame.init()
# create window
screen = pygame.display.set_mode(SIZE)
screen_rect = screen.get_rect()
# many scenes
result = title("CLICK MOUSE", screen, screen_rect)
if result: # skip if pygame.QUIT
result = title("OR PRESS ESC", screen, screen_rect)
if result: # skip if pygame.QUIT
result = title("NOW I SEE", screen, screen_rect)
if result: # skip if pygame.QUIT
result = title("HELLO WORLD", screen, screen_rect)
if result: # skip if pygame.QUIT
result = title("BYE, BYE", screen, screen_rect)
# quit
pygame.quit()
sys.exit()
Sie haben Syntaxfehler, die das Skript ausgeführt werden soll nicht zulassen. 'import pygame.init()' sollte nicht in derselben Zeile wie der Import sein. Das gleiche gilt für 'screen = pygame.display.set_mode (size)' und 'black = (0,0,0)'. Auch 'nowIseeAlpha' ist nicht definiert. – siavashk
@siavashk Hoppla, Tippfehler. Ich habe sie behoben –
Warum benutzt du 'set_mode' dreimal? 'set_mode' ist keine Funktion um eine Oberfläche zu erzeugen - dafür hast du' pygame.Surface() '. – furas