2016-11-10 2 views
0
import pygame,sys 
pygame.init() 

size = (425,550) 
screen = pygame.display.set_mode(size) 

lightcyan = (191,255,255) 
black = (0,0,0) 

titlefont = pygame.font.SysFont("Calibri",36) 
subtitlefont = pygame.font.SysFont("Calibri",24) 

def title(): 
    titlescreenAlpha = 0 

    centeredText = pygame.display.set_mode(size) 
    centeredText = centeredText.convert() 
    centeredText.set_alpha(0) 

    titlescreen = pygame.display.set_mode(size).convert() 
    titlescreen.set_alpha(titlescreenAlpha) 
    nowiseeText = titlefont.render("NOW I SEE",1,black) 
    centeredText.blit(nowiseeText,(0,0)) 
    nowiseeTextRect = nowiseeText.get_rect() 
    nowiseeTextRect.center = (size[0]/2,225) 

    while True: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       sys.exit() 

     if titlescreenAlpha < 255: 
      titlescreenAlpha += 1 
      titlescreen.set_alpha(titlescreenAlpha) 
     print(titlescreenAlpha) 

     screen.fill(lightcyan) 
     titlescreen.blit(nowiseeText,nowiseeTextRect) 
     pygame.display.flip() 
     pygame.time.wait(10) 

title() 

Ich versuche, eine Titelsequenz für einen e-Spread über Optik zu machen. Das ist alles was ich bisher habe.Warum zeigt der Titelbildschirm nichts an?

Wenn ich es ausführe, wird titlescreenAlpha um 1 erhöht, bis es 255 erreicht, aber titlescreen.set_alpha(titlescreenAlpha) scheint nicht zu funktionieren.

Warum kann ich nur Zeug auf dem Bildschirm sehen?

+0

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

+0

@siavashk Hoppla, Tippfehler. Ich habe sie behoben –

+0

Warum benutzt du 'set_mode' dreimal? 'set_mode' ist keine Funktion um eine Oberfläche zu erzeugen - dafür hast du' pygame.Surface() '. – furas

Antwort

1

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

vielen dank! Ich habe Python erst seit 2 Monaten gelernt und bin noch nicht zu Alphas gekommen. –

+0

Was macht center = screen_rect.center? –

+0

Pygame verwendet [pygame.Rect (x, y, width, height)] (http://www.pygame.org/docs/ref/rect.html), um Position und Größe zu behalten (und Kollisionen zu prüfen). Es hat die Eigenschaften 'x',' y', 'width',' height' und andere wie 'center' (' (width // 2, height // 2) '), so dass Sie einen Mittelpunkt oder einen Mittelpunkt erhalten können (und Objekt verschieben). Der Code 'text_rect = text.get_rect (center = screen_rect.center)' funktioniert wie zwei Zeilen 'text_rect = text.get_rect()' und 'text_rect.center = screen_rect.center', so dass' text' in die Mitte von 'screen' verschoben wird – furas