pythonpython-3.xpygamepygame-surface

How do I use blit() in the proper way in pygame?


I was trying to make a texture game, but it doesn't work with no errors. I'll show the code.

import time
import pygame
from pygame.locals import *

def Main():
    pygame.mixer.init()

    pygame.mixer.music.load(r"C:\...\OMFG+-+Ice+Cream.mp3")
    pygame.mixer.music.play(-1)

    pygame.init()

    screen = pygame.display.set_mode((640, 480))
    screen.fill((0,0,0))
    pygame.display.set_caption("3 Minutes Left!!!")

    font = pygame.font.Font('freesansbold.ttf', 18)

    intro_1 = font.render('3', True, (255,255,255))
    intro_2 = font.render('Minutes', True, (255,255,255))
    intro_3 = font.render('Left!!!', True, (255,255,255))

    time.sleep(1)
    screen.blit(intro_1, (140, 30)) #This isn't working.
    time.sleep(1)
    screen.blit(intro_2, (340, 30)) #This isn't working.
    time.sleep(1)
    screen.blit(intro_3, (540, 30)) #This isn't working.

Main()

I thought that the code screen.blit would work with while loops. So I tried.

import time
import pygame
from pygame.locals import *

def Main():
    pygame.mixer.init()

    pygame.mixer.music.load(r"C:\...\OMFG+-+Ice+Cream.mp3")
    pygame.mixer.music.play(-1)

    pygame.init()

    screen = pygame.display.set_mode((640, 480))
    screen.fill((0,0,0))
    pygame.display.set_caption("3 Minutes Left!!!")

    font = pygame.font.Font('freesansbold.ttf', 18)

    intro_1 = font.render('3', True, (255,255,255))
    intro_2 = font.render('Minutes', True, (255,255,255))
    intro_3 = font.render('Left!!!', True, (255,255,255))

    while True: #This isn't working.
        time.sleep(1)
        screen.blit(intro_1, (140, 30)) #This isn't working.
        time.sleep(1)
        screen.blit(intro_2, (340, 30)) #This isn't working.
        time.sleep(1)
        screen.blit(intro_3, (540, 30)) #This isn't working.

Main()

And I started the program. But pygame tab had no response. So i tried the screen.blit in a definition.

import time
import pygame
from pygame.locals import *

def Main():
    pygame.mixer.init()

    pygame.mixer.music.load(r"C:\...\OMFG+-+Ice+Cream.mp3")
    pygame.mixer.music.play(-1)

    pygame.init()

    screen = pygame.display.set_mode((640, 480))
    screen.fill((0,0,0))
    pygame.display.set_caption("3 Minutes Left!!!")

    font = pygame.font.Font('freesansbold.ttf', 18)

    intro_1 = font.render('3', True, (255,255,255))
    intro_2 = font.render('Minutes', True, (255,255,255))
    intro_3 = font.render('Left!!!', True, (255,255,255))

    while True: #This isn't working.
        screen_blit(screen, intro_1, intro_2, intro_3) #This isn't working.

def screen_blit(screen, intro_1, intro_2, intro_3): #This isn't working.
    time.sleep(1)
    screen.blit(intro_1, (340, 30)) #This isn't working.
    time.sleep(1)
    screen.blit(intro_2, (340, 30)) #This isn't working.
    time.sleep(1)
    screen.blit(intro_3, (340, 30)) #This isn't working.

Main()

Again, No Response. How can I fix this???


Solution

  • The window is not responding, because you don't handle the events. You don't see anything in the window, because you don't update the display.
    A minimal typical PyGame application

    e.g:

    def Main():
        # [...]
    
        while True: #This isn't working.
    
            # handle the events
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self.quit()
    
            # draw the scene
            screen.blit(intro_1, (340, 30))
    
            # update the display
            pygame.display.flip()