sbrevolution5
sbrevolution5

Reputation: 183

Trouble with pygame rendering

I've got an issue where pygame is only rendering ablack screen with a strange glitchy green line on it.

I'm following a tutorial on RealPython.com and everything went smoothly with the first attempt. Once I did the second attempt this is what renders, which is clearly wrong.

#sidescrolling air-shooter
import pygame
#import pygame locals
from pygame.locals import(
    K_UP,
    K_DOWN,
    K_LEFT,
    K_RIGHT,
    K_ESCAPE,
    KEYDOWN,
    QUIT,
)

#constants for screen width/height
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
class Player(pygame.sprite.Sprite):
       def __init__(self):
        super(Player, self).__init__()
        self.surf = pygame.Surface((75,25))
        self.surf.fill((255, 255,255))
        self.rect = self.surf.get_rect()

pygame.init()
#create screen
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

# Instantiate player
player = Player()
#keep the game running!
running = True

#loop time!
while running:
    #look at all the events
    for event in pygame.event.get():
        #did the user hit a key?
        if event.type == KEYDOWN:
            #Was it escape?  uh oh we gotta stop
            if event.key == K_ESCAPE:
                running = False

        elif event.type ==QUIT:
            running = False

#fill screen with white
screen.fill((255, 255, 255))

# Create a surface and pass in a tuple containing legth and width
surf = pygame.Surface((50, 50))

# Give the surface a color to separate it from the Background
surf.fill((0, 0, 0))
rect = surf.get_rect()

#This line says "Draw surf onto the screen at the center"
screen.blit(surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
#Draw the player on the screen
screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
pygame.display.flip()
pygame.quit()

I've even checked the source code for their project and it seems to match up.

Upvotes: 1

Views: 383

Answers (1)

Rabbid76
Rabbid76

Reputation: 210878

It is a matter of Indentation. You need to draw the scene and update the display in the application loop instead of after the application loop:

#loop time!
while running:
    #look at all the events
    for event in pygame.event.get():
        #did the user hit a key?
        if event.type == KEYDOWN:
            #Was it escape?  uh oh we gotta stop
            if event.key == K_ESCAPE:
                running = False

        elif event.type ==QUIT:
            running = False

    #-->| INDENTATION

    #fill screen with white
    screen.fill((255, 255, 255))

    # Create a surface and pass in a tuple containing legth and width
    surf = pygame.Surface((50, 50))

    # Give the surface a color to separate it from the Background
    surf.fill((0, 0, 0))
    rect = surf.get_rect()

    #This line says "Draw surf onto the screen at the center"
    screen.blit(surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
    #Draw the player on the screen
    screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
    pygame.display.flip()

pygame.quit()

Upvotes: 1

Related Questions