After the screen is blitted how to make a rectangle when there is already an existing moving rectangle?

Viewed 26

I am making this game in PyGame and I have a moving rectangle, So I want to make another rectangle which is drawn to the screen when I press the Space Bar. So I have tried adding the if statement but it doesn't work as the screen fills as soon as the Rectangle is drawn. Can anyone tell me how to draw the rectangle after the screen is filled with a color?

Here is my code

import pygame
from pygame.locals import *

pygame.init()

screenwidth = 1200
screenheight = 500
screen = pygame.display.set_mode((screenwidth, screenheight))
pygame.display.set_caption('Bullepacito')

def _rect():
    run = False
    while not run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = True
            if event.type == pygame.KEYDOWN:
                if event.type == pygame.K_SPACE:
                    pygame.draw.rect(screen, (255, 0, 255), pygame.Rect(400, 400, 20, 20))

def gameloop():
    run = False
    shooterx = 350
    shootery = 350
    while not run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                  shooterx -= 5  
                if event.key == pygame.K_RIGHT:
                    shooterx += 5
        screen.fill((30, 30, 30))
        pygame.draw.rect(screen, (255, 0, 255), pygame.Rect(shooterx, shootery, 50, 50))
        # Code to draw the rectangle on key press
        pygame.display.update()

gameloop()
1 Answers

Set a boolean state (draw_rect) when SPACE is pressed and draw the rectangle depending on the state:

import pygame
from pygame.locals import *

pygame.init()

screenwidth = 1200
screenheight = 500
screen = pygame.display.set_mode((screenwidth, screenheight))
pygame.display.set_caption('Bullepacito')

def gameloop():
    run = False
    shooterx = 350
    shootery = 350
    draw_rect = False
    while not run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                  shooterx -= 5  
                if event.key == pygame.K_RIGHT:
                    shooterx += 5

                if event.key == pygame.K_SPACE:
                    draw_rect = True

        screen.fill((30, 30, 30))
        pygame.draw.rect(screen, (255, 0, 255), pygame.Rect(shooterx, shootery, 50, 50))
        if draw_rect:
            pygame.draw.rect(screen, (255, 0, 255), pygame.Rect(400, 400, 20, 20))
        pygame.display.update()

gameloop()
Related