Alan Bagel
Alan Bagel

Reputation: 911

Enemy not appearing

I am making a pygame game where you control a spaceship and fire bullets to hit the enemies. As of right now, I am trying to make an enemy appear on the screen. Not making it move yet. However, when I ran my following code, Nothing but the spaceship appeared. The spaceship also was able to move and fire bullets.

This is my current code:

import pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((800, 500))
screen.fill((255, 255, 255))


class Spaceship(pygame.sprite.Sprite):
    def __init__(self, s, x, y):
        pygame.sprite.Sprite.__init__(self)

        self.screen = s
        self.x, self.y = x, y
        self.image = pygame.image.load("C:/eqodqfe/spaceship.png")
        self.image = pygame.transform.scale(self.image, (175, 175))
        self.rect = self.image.get_rect()
        self.rect.center = (self.x, self.y)

    def update(self):
        self.rect.center = (self.x, self.y)


class Bullet(pygame.sprite.Sprite):
    def __init__(self, s, x, y):
        pygame.sprite.Sprite.__init__(self)

        self.screen = s
        self.x, self.y = x, y
        self.image = pygame.image.load("C:/eqodqfe/bullet.png")
        self.image = pygame.transform.scale(self.image, (100, 100))
        self.rect = self.image.get_rect()
        self.rect.center = (self.x, self.y)

    def update(self):
        self.y -= 1
        self.rect.center = (self.x, self.y)
        if self.y < 0:
            self.kill()


class Enemy(Spaceship):
    def __init__(self, s, x, y):
        Spaceship.__init__(self, s, x, y)

        self.image = pygame.image.load("C:/eqodqfe/enemy.png")
        self.image = pygame.transform.scale(self.image, (175, 175))
        self.rect = self.image.get_rect()


spaceship = Spaceship(screen, 400, 400)
enemy = Enemy(screen, 100, 100)

bullets = pygame.sprite.Group()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == MOUSEBUTTONDOWN:
            bullet = Bullet(screen, spaceship.x, spaceship.y - 20)
            bullets.add(bullet)

    bullets.update()

    key = pygame.key.get_pressed()
    if key[pygame.K_a]:
        spaceship.x -= 0.5
    elif key[pygame.K_d]:
        spaceship.x += 0.5
    elif key[pygame.K_w]:
        spaceship.y -= 0.5
    elif key[pygame.K_s]:
        spaceship.y += 0.5

    spaceship.update()

    screen.blit(enemy.image, enemy.rect)
    enemy.update()

    screen.fill((255, 255, 255))
    screen.blit(spaceship.image, spaceship.rect)
    bullets.draw(screen)

    pygame.display.update()

What is wrong?

Upvotes: 0

Views: 70

Answers (1)

Rabbid76
Rabbid76

Reputation: 211258

You have to draw the enemy after drawing the background. If you draw the enemy before the background, the background will hide the enemy:

running = True
while running:
    # [...]

    # screen.blit(enemy.image, enemy.rect)          <-- DELETE
    enemy.update()

    screen.fill((255, 255, 255))
    screen.blit(enemy.image, enemy.rect)          # <-- INSERT
    screen.blit(spaceship.image, spaceship.rect)
    bullets.draw(screen)

    pygame.display.update()

Upvotes: 1

Related Questions