无法在python / pygame中创建多个实例

时间:2017-07-26 22:33:41

标签: python python-3.x pygame

我一直在制作一个smup游戏。问题是我在游戏中有多个敌人实例应该从屏幕顶部掉落。我的所有实例除了一个挂在屏幕顶部。出于一些奇怪的原因,似乎只有我的敌人物体的一个实例似乎在移动。我花了好几个小时试图修复它绝对无济于事。我还浏览了大量有关如何创建类的教程,但我无法找到代码中的任何问题。请帮忙。

import pygame,random,os
from pygame.locals import *
'initialize pygame'
pygame.init()
'set variables'
red = (255,0,0)
green = (0,255,0)
blue = (0,0,255)
black = (0,0,0)
white = (255,255,255)
width = 1280
height = 720
'create window'
screen =  pygame.display.set_mode((1280,720))
clock = pygame.time.Clock()
'sprite groups'
all_sprites = pygame.sprite.Group()
enemies = pygame.sprite.Group()
'classes'
class Player(pygame.sprite.Sprite):
    def __init__(self):
        self.x, self.y = pygame.mouse.get_pos()
        pygame.sprite.Sprite.__init__(self)
        #self.image = pygame.Surface((32,32))++--3
        #$self.image.fill((green))
        self.image = pygame.image.load("vehicle.png")
        self.image.set_colorkey(white)
        self.rect = self.image.get_rect()
        self.rect.center = (width/2,700)
        self.speed = 0
    def move(self):
        self.keypress = pygame.key.get_pressed()
        if self.keypress[pygame.K_a]:
            self.speed = 3
            self.rect.x -= self.speed
        if self.keypress[pygame.K_d]:
            self.speed = 3
            self.rect.x += self.speed
        #self.rect.x += 1
        if self.rect.left > width:
            self.rect.right = 0
        if self.rect.right < 0:
            self.rect.left = 1280
class Enemy(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("missile.png")
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(50,width)
        self.rect.y = random.randrange(-100,-40)
        self.speedy = random.randrange(1,5)
    def enmove(self):
        self.rect.y = self.rect.y + self.speedy
        if self.rect.top > height:
            self.rect.x = random.randrange(50,width)
            self.rect.y = random.randrange(-100,-40) 
            self.speedy = random.randrange(1,5)            
class bullet(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((32,32))
        self.rect = self.image.get_rect()
    def bmove(self):
        pass





player = Player()
for r in range(9):
    enemy = Enemy()
    enemies.add(enemy)

while True:

    pygame.event.pump()
    'main loop'   
    player.move()
    enemy.enmove()
    all_sprites.add(player)
    screen.fill(black)
    all_sprites.draw(screen)
    enemies.draw(screen)

    hits = pygame.sprite.spritecollide(player,enemies,False)
    if hits == True:
        player.all_sprites.remove(player)
        print('true')
    all_sprites.update()

    pygame.display.update()
    print(hits)

1 个答案:

答案 0 :(得分:1)

你的问题似乎是你只移动了最后一个敌人:

enemy.enmove()

你应该尝试迭代你的enemies组并单独移动每个敌人