Gerald Moore
Gerald Moore

Reputation: 1

Enemy Object wont move in Pygame

I'm trying to make a character move across the screen from the top to the bottom, where it will disappear. However, the code I have doesn't return any errors, but it won't move the character either. Here is my code:

import pygame
import sys
import random

pygame.init()
width , height = 600 , 500
display = pygame.display.set_mode((width, height ) )
pygame.display.set_caption("Class Test")

primoimage = pygame.image.load("/home/pi/Downloads/PRIMO/primo_0.png").convert()


class Enemy:
    def __init__(self, name, shoot, speed, image):
        self.name = name
        self.shoot = shoot
        self.speed = speed
        self.image = image




def move(self):
    enemyRack = []
    if len(enemyRack) == 0:
        enemyRack.append([width/2, 0])
    for enemy in enemyRack:
        display.blit(self.image, pygame.Rect(enemy[0], enemy[1], 0,0))
    for e in range(len(enemyRack)):
        enemyRack[e][1]+=2
    for enemy in enemyRack:
    if enemy[1] > height:
        enemyRack.remove(enemy)

primo = Enemy("primo", 2, False, primoimage)


running = True

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                pass 

primo.move()
pygame.display.update()



pygame.quit()
sys.exit()

The problem is in the move() function.

If you could figure it out that would be great! Thanks.

Upvotes: 0

Views: 129

Answers (1)

sneep
sneep

Reputation: 1918

I added some indentation so things work again. (I'm assuming you just broke the indentation when posting your code). Your error was re-initializing enemyRack = [] every time move is called. That way you'll always have [300, 0] in the enemyRack.

import pygame
import sys
import random

pygame.init()
width , height = 600 , 500
display = pygame.display.set_mode((width, height ) )
pygame.display.set_caption("Class Test")

primoimage = pygame.image.load("player.png").convert()


class Enemy:
    def __init__(self, name, shoot, speed, image):
        self.name = name
        self.shoot = shoot
        self.speed = speed
        self.image = image
        self.enemyRack = [] # let's make this a class variable so we don't lose the contents

    def move(self):
        if len(self.enemyRack) == 0:
            self.enemyRack.append([width/2, 0])
        for enemy in self.enemyRack:
            display.blit(self.image, pygame.Rect(enemy[0], enemy[1], 0,0))
        for e in range(len(self.enemyRack)):
            self.enemyRack[e][1]+=2
        for enemy in self.enemyRack:
            if enemy[1] > height:
                self.enemyRack.remove(enemy)

primo = Enemy("primo", 2, False, primoimage)
running = True

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                pass 
            primo.move()
    pygame.display.update()

pygame.quit()
sys.exit()

Upvotes: 2

Related Questions