2016-04-18 16 views
0

私はPyGameとPython 3.4を使ってゲームを構築しています。AttributeError: 'Player'オブジェクトに 'sprites'属性がありません

Traceback (most recent call last): 
    File "C:\Users\----\Desktop\Python\Game.py", line 115, in <module> 
    playerhit = pygame.sprite.spritecollide(ebullet, psprite, True) 
    File "C:\Python34\lib\site-packages\pygame\sprite.py", line 1514, in spritecollide 
    for s in group.sprites(): 
AttributeError: 'Player' object has no attribute 'sprites' 

私はそれを考えていませんが、私は私の名前を飛び出したが、長さを保った:完全なエラーがあるので、私はモジュール自体ではなく、私が持っている実際のコードと思われるもので問題が生じています問題。

私はエラーのさまざまな部分についてウェブを見てきましたが、何も出てこなかったので、ここに来ました。ここでは完全なコードだ(それはちょっと厄介と長いです):助けを事前に

import pygame, time, sys, random, Sprites, os 
from pygame.locals import * 

BLACK = (0, 0, 0) 
MAPX = 10 
MAPY = 20 
TXY = 32 

gameover = False 
score = 0 

lives = 2 

playerXY = [MAPX*TXY//2, MAPY*TXY-TXY-TXY-5] 

spritesheet01 = Sprites.Sheet(32, 32, 128, 32, 'spritesheet03.png') 
sprites = spritesheet01.clipSheet() 

psprite = Sprites.Player(sprites[0]) 

clock = pygame.time.Clock() 
counter = int(clock.get_fps()) 

ebullet = Sprites.eBullet(sprites[3]) 

allspriteslist = pygame.sprite.Group() 
enemylist = pygame.sprite.Group() 
ebulletlist = pygame.sprite.Group() 
pbulletlist = pygame.sprite.Group() 

allspriteslist.add(psprite) 

pygame.init() 

enemynum = 5 
enemies = [] 
enemytorf = [False, False, False, False, False, False, False, False, False, False] 

def pause(): 
    os.system("pause") 

def enemyCreate(): 
    print("enemycreate called") 
    while len(enemylist) < 5: 
     randomindex = random.randint(0, MAPX-1) 
     if enemytorf[randomindex] == False: 
      enemy = Sprites.Enemy(sprites[1]) 
      enemytorf[randomindex] = True 
      enemy.rect.x = randomindex 
      enemy.rect.y = 0 
      ebullet.rect.x = randomindex 
      ebullet.rect.y = 0 
      enemylist.add(enemy) 
      allspriteslist.add(enemy) 
      ebulletlist.add(ebullet) 
      allspriteslist.add(ebullet) 
    print("enemycreate done") 

def eBulletCreate(): 
    print("bulletpassed") 
    for wi in range(len(ebull)): 
     ebullappend = ebull[wi] 
     ebullets.append(ebullappend) 

print("Got through function defining") 
display = pygame.display.set_mode((MAPX*TXY, MAPY*TXY)) 
pygame.display.set_caption("Star Smasher") 
print("created screen") 
pygame.key.set_repeat(10, 10) 
endgame = False 
create_enemy = pygame.USEREVENT + 1 
shootbullet = pygame.USEREVENT + 2 
print("created events") 
enemyCreate() 
pygame.time.set_timer(create_enemy, 7500) 
pygame.time.set_timer(shootbullet, 2500) 
print("Got to the while") 
while endgame == False: 
    print("got into while") 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 
     if event.type == KEYDOWN: 
      if event.key == K_SPACE: 
       pbullet = Sprites.pBullet(sprites[2]) 
       pbullet.rect.x = playerXY[0] 
       pbullet.rect.y = playerXY[1] 
       allspriteslist.add(pbullet) 
       pbulletlist.add(pbullet) 
      elif event.key == K_a: 
       if playerXY[0] > 5: 
        playerXY[0] -= 5 
      elif event.key == K_d: 
       if playerXY[0] < MAPX*TXY-TXY-7: 
        playerXY[0] += 5 
     if event.type == create_enemy: 
      enemyCreate() 
     if event.type == shootbullet: 
      eBulletCreate() 
    print("got through event handling") 
    for bullet in pbulletlist: 
     enemyhitlist = pygame.sprite.spritecollide(pbullet, enemylist, True) 
     for enemy in enemyhitlist: 
      pbulletlist.remove(bullet) 
      allspriteslist.remove(bullet) 
      score += 100 
      print(score) 
     if pbullet.rect.y < 0: 
      pbulletlist.remove(bullet) 
      allspriteslist.remove(bullet) 
    for bullet in ebulletlist: 
     playerhit = pygame.sprite.spritecollide(ebullet, psprite, True) 
     for player in playerhit: 
      ebulletlist.remove(bullet) 
      allspriteslist.remove(bullet) 
      gameover = True 
     if ebullet.rect.y > MAPY*TXY: 
      ebulletlist.remove(bullet) 
      allspriteslist.remove(bullet) 
    print("got through bullet handling") 
    display.fill(BLACK) 
    allspriteslist.draw(display) 
    if gameover == True: 
     font = pygame.font.Font(freesansbold.ttf, 20) 
     font.render("Game Over, press any button to continue!", True, BLACK, background=None) 
     display.blit(font, (160, 320, 200, 360)) 
     pause() 
    pygame.display.update() 
    clock.tick(60) 
    print("Got to the display update") 
pygame.quit() 

ありがとう!

+0

115行目では、bullet上にループしていても、playerhitをebulletと引数としてチェックしています。それは意図的なのでしょうか? – Schore

+3

あなたは 'Sprites.py'のコンテンツや' Player'クラスだけを投稿できますか? – jDo

+0

MCVEを投稿してください。 –

答えて

0

開始に間違った方法です。 playerhit = pygame.sprite.spritecollide(ebullet, psprite, True) - 関数の定義はspritecollide(sprite, group, dokill, collided = None)であるため、最初にプレイヤーを指定し、その後に弾丸グループを指定する必要があります。

また、Sprite.pyコードを投稿してください。

関連する問題