2017-07-26 107 views
1

我一直在創建一個smup遊戲。問題是我在遊戲中有多個敵人的實例,它們應該從屏幕的頂部掉下來。除了一個實例外,我的所有實例都掛在屏幕的頂部。由於一些奇怪的原因,似乎只有一個我的敵人物體似乎在移動。我花了幾個小時試圖解決它,絕對沒有用。我還瀏覽了大量有關如何創建類的教程,而且我找不到任何與我的代碼有關的錯誤。請幫忙。在python/pygame中創建多個實例時遇到麻煩

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

您的問題似乎是,你只移動最後的敵人:

enemy.enmove()

你應該嘗試遍歷您enemies組,並向每一個敵人seperately

+0

啊。感謝它幫助了很多! –