I'm trying to draw a bullet when user press "space", but its not displaying even when I call pygame.draw.rect()
after pygame.display.fill()
.
The bullet would only get displayed when I comment out the pygame.display.fill()
I think the only problem is in main.py, but I couldn't figure out why
main.py
import pygame
from settings import GameSettings
from player_ship import PlayerShip
from bullet import Bullet
class AlienInvasion:
def __init__(self):
pygame.init()
self.settings = GameSettings()
self.game_screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))
self.bullets = []
self.player_ship = PlayerShip(self, self.settings)
self.active = True
def run_game(self):
while self.active:
self.game_screen.fill(self.settings.bg_color) # calling surface.fill before pygame.draw.rect()
self.check_game_events() # bullet object gets created in here
self.player_ship.move_on_command()
self.update_screen() # pygame.display.flip() in here
def update_screen(self):
self.player_ship.blitme()
pygame.display.flip()
def check_game_events(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.active = False
if event.type == pygame.KEYDOWN:
self.kdown_events(event)
if event.type == pygame.KEYUP:
self.kup_event(event)
def kdown_events(self, event):
if event.key == pygame.K_LEFT:
self.player_ship.move_left = True
if event.key == pygame.K_RIGHT:
self.player_ship.move_right = True
if event.key == pygame.K_q:
self.active = False
if event.key == pygame.K_SPACE:
bullet = Bullet(self)
bullet.draw_bullet()
def kup_event(self, event):
if event.key == pygame.K_LEFT:
self.player_ship.move_left = False
if event.key == pygame.K_RIGHT:
self.player_ship.move_right = False
if __name__ == "__main__":
main_game = AlienInvasion()
main_game.run_game()
bullet.py
import pygame
class Bullet():
def __init__(self, main_game):
self.game_screen = main_game.game_screen
self.rect = pygame.Rect(10, 10, 20, 20)
self.color = (48, 141, 70)
self.rect.x = 200
self.rect.y = 200
def draw_bullet(self):
pygame.draw.rect(self.game_screen, self.color, self.rect)
settings.py
class GameSettings:
def __init__(self):
self.screen_size = (800, 600)
self.screen_width = 800
self.screen_height = 600
self.bg_color = (230, 230, 230)
self.playership_img_fp = "static/images/ship.bmp"
self.dist_move_on_kpress = 1
player_ship.py
import pygame
class PlayerShip:
def __init__(self, main_game, settings):
self.settings = settings
self.game_screen = main_game.game_screen
self.game_screen_rect = self.game_screen.get_rect()
self.image = pygame.image.load(settings.playership_img_fp)
self.rect = self.image.get_rect()
self.rect.midbottom = self.game_screen_rect.midbottom
self.move_left = False
self.move_right = False
def blitme(self):
self.game_screen.blit(self.image, self.rect)
def move_on_command(self):
if self.move_right:
if self.rect.right < self.game_screen_rect.right:
self.rect.x += self.settings.dist_move_on_kpress
if self.move_left:
if self.rect.left > self.game_screen_rect.left:
self.rect.x -= self.settings.dist_move_on_kpress