2017-09-01 51 views
1

我最近一直在学习python,并且我刚刚发现了关于sprite的信息。他们看起来非常有用,我一直在尝试制作一个游戏,你必须吃所有的红苹果(健康),而不是蓝苹果(发霉)。当我试图运行发生错误,它说:Python 3.6.2中的Rect错误,Pygame 1.9.3

line 32, in <module> 
    apples.rect.y = random.randrange(displayHeight - 20) 
    AttributeError: type object 'apples' has no attribute 'rect' 

很抱歉,如果我做了一个非常nooby错误,但我一直在其他地方寻找答案,我找不到一个。这里是我的整个主代码:

import pygame 
import random 

pygame.init() 

displayWidth = 800 
displayHeight = 600 

black = (0, 0, 0) 
white = (255, 255, 255) 
red = (255, 0, 0) 
green = (0, 255, 0) 
blue = (0, 0, 255) 

gameDisplay = pygame.display.set_mode((displayWidth, displayHeight)) 
gameCaption = pygame.display.set_caption("Eat The Apples") 
gameClock = pygame.time.Clock() 

class apples(pygame.sprite.Sprite): 
    def __init__(self, colour, width, height): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.Surface([20, 10]) 
     self.image.fill(red) 
     self.rect = self.image.get_rect() 

applesList = pygame.sprite.Group() 
allSpriteList = pygame.sprite.Group() 

for i in range(50): 
    apple = apples(red, 20 , 20) 

    apples.rect.y = random.randrange(displayHeight - 20) 
    apples.rect.x = random.randrange(displayWidth - 20) 

    applesList.add(apple) 
    allSpriteList.add(apple) 

player = apples(green, 20, 20) 

def gameLoop(): 

    gameExit = False 

    while not gameExit: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       gameExit = True 

     pygame.display.update() 
     gameClock.tick(60) 

gameLoop() 
pygame.quit() 
quit() 

谢谢你的阅读,我期待着回应! (PS这个代码并不完全完成,如果你想知道)

回答

0

你想改变这个类的rect属性在这里不是实例的矩形,因为类没有矩形, AttributeError被提出。

apples.rect.y = random.randrange(displayHeight - 20) 
apples.rect.x = random.randrange(displayWidth - 20) 

只要改变​​到apple(实例),它应该正常工作。

apple.rect.y = random.randrange(displayHeight - 20) 
apple.rect.x = random.randrange(displayWidth - 20) 
+0

[PEP 8](https://www.python.org/dev/peps/pep-0008/#class-names)建议为类使用camelcase名称,例如'类MyClassName:',小写字母用于变量和函数。 – skrx

+0

感谢您的帮助,我也想知道如何显示这些精灵。可能有一个非常简单的答案,但忍耐我我是一个初学者。 –

+0

看看[程序街机游戏的第13章](http://programarcadegames.com/index.php?chapter=introduction_to_sprites&lang=de#section_13)。它向你展示了如何使用精灵和精灵组。您只需将所有精灵放入一个组中(命名为all_sprites),然后在主循环中调用all_sprites.update()和all_sprites.draw(gameDisplay)来更新所有精灵并绘制它们。 – skrx

0

是的,就像skrx说的。你只需要挑出一个。 苹果苹果:

应该工作。