2016-12-13 8 views
1

У меня есть игра, которая должна позволить двум игрокам играть. Однако второй игрок не перемещается, когда пользователь нажимает клавиши вниз. (Plane2 является вторым игроком)Python спрайт контрольный вопрос

class Plane(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load("plane.gif") 
     self.image = self.image.convert() 
     self.rect = self.image.get_rect() 

     if not pygame.mixer: 
      print "problem with sound" 
     else: 
      pygame.mixer.init() 
      self.sndDing = pygame.mixer.Sound("ding.ogg") 
      self.sndCrash = pygame.mixer.Sound("planeCrash.ogg") 

    def update(self): 
     mousex, mousey = pygame.mouse.get_pos() 
     self.rect.center = (mousex, mousey) 

class Plane2(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load("plane2.gif") 
     self.image = self.image.convert() 
     self.rect = self.image.get_rect() 
     self.rect.centerx = 320 
     self.rect.centery = 240 

    def update(self): 
     for event in pygame.event.get(): 
      if event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_LEFT: 
        self.rect.centerx -= 8 
       if event.key == pygame.K_RIGHT: 
        self.rect.centerx += 8 
       if event.key == pygame.K_UP: 
        self.rect.centery += 8 
       if event.key == pygame.K_DOWN: 
        self.rect.centery -= 8 

Я попытался переместить функцию обновления для Plane2 в петлю игры, но не решить проблему.

def gameEndless(): 
    pygame.display.set_caption("Mail Pilot!") 

    background = pygame.Surface(screen.get_size()) 
    background.fill((0, 0, 0)) 
    screen.blit(background, (0, 0)) 
    plane = Plane() 
    island = Island() 
    ocean = Ocean() 
    scoreboard = Scoreboard() 

    oceanSprites = pygame.sprite.Group(ocean) 
    islandSprites = pygame.sprite.Group(island) 
    planeSprite = pygame.sprite.Group(plane) 
    scoreSprite = pygame.sprite.Group(scoreboard) 
    bulletSprites = pygame.sprite.Group() 

    enemySprites = pygame.sprite.Group() 
    bossSprite = pygame.sprite.Group() 
    bossWeaponSprites = pygame.sprite.Group() 

    if gameType == "coop": 
     scoreboard.lives = 10 
     player2 = Plane2() 
     planeSprite.add(player2) 

Я также попытался сделать второй игрок собственной группой спрайтов, но это тоже не помогло.

ответ

0
class Plane2(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load("plane2.gif") 
     self.image = self.image.convert() 
     self.rect = self.image.get_rect() 
     self.rect.centerx = 320 
     self.rect.centery = 240 

    def update(self): 
     keys = pygame.key.get_pressed() 
     if keys[pygame.K_UP]: 
      self.rect.centery -= 8 
     if keys[pygame.K_DOWN]: 
      self.rect.centery += 8 
     if keys[pygame.K_LEFT]: 
      self.rect.centerx -= 8 
     if keys[pygame.K_RIGHT]: 
      self.rect.centerx += 8 

фиксированный код

0

Создать update() без for цикла, но с аргументом event

def update(self, event): 
    if event.type == pygame.KEYDOWN: 
     if event.key == pygame.K_LEFT: 
      self.rect.centerx -= 8 
     elif event.key == pygame.K_RIGHT: 
      self.rect.centerx += 8 
     elif event.key == pygame.K_UP: 
      self.rect.centery += 8 
     if event.key == pygame.K_DOWN 

и в главном использовании update() петли внутри петли for

for event in pygame.event.get(): 
    player1.update(event) 
    player2.update(event) 

Таким образом, вы может обрабатывать различные события в update() - не только key события, но и mouse события или user-defined события.

Некоторые люди используют имя handle_event для этой функции. И они используют update() для изменения этих элементов, которые не нуждаются в событиях - т.е. установите следующий кадр анимации.

# --- events --- 

for event in pygame.event.get(): 
    player1.handle_event(event) 
    player2.handle_event(event) 

# --- updates --- 

player1.update() 
player2.update() 

 Смежные вопросы

  • Нет связанных вопросов^_^