2017-09-01 7 views
1

最近私はPythonを学んでいましたが、私はスプライトについて知りました。彼らは本当に便利だと思うし、青いリンゴ(カビ)を食べなくてはならない、赤いリンゴ(健康)を食べなければならないゲームをしようとしています。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エラーをしたが、私は他の場所で答えを探していると私は1つを見つけることができなかった場合:私はそれを実行しようとしましたが、それが言ったときにエラーが発生しました。ここに私のメインコード全体があります:

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属性をインスタンスの矩形ではなく変更しようとしています。クラスに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)では、クラスにキャメルケース名を使用することをお勧めします。 'class 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と同様です。あなたはちょうど1つ1つを出してください。リンゴのりんごのための :

はうまくいくはずです。

関連する問題