Enemy Object不会在Pygame中移动

时间:2018-04-19 13:20:59

标签: python python-3.x function class pygame

我试图让一个角色从顶部到底部在屏幕上移动,在那里它会消失。但是,我所拥有的代码并没有返回任何错误,但它也不会移动该字符。这是我的代码:

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()

问题出在move()函数中。

如果你能弄清楚这会很棒!感谢。

1 个答案:

答案 0 :(得分:2)

我添加了一些缩进,所以事情再次起作用。 (我假设您在发布代码时打破了缩进)。每次调用enemyRack = []时,您的错误都会重新初始化move。这样你enemyRack中总会有[300,0]。

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()